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.
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.