When a bitcoin node has the blockchain in sync, most transactions in incoming block
messages may have been already received as standalone tx
messages before.
With a block
message with only transaction hashes, the receiving node could try to reassemble the full block with its unconfirmed transactions and just request the missing transactions to complete the block.
Since this way to save bandwidth looks too obvious, I'm guessing there must a reason to always include the transactions in block
messages, even after downloading the blockchain.