I thought maybe there are repeated tx ids, or auxiliary data that clients can theoretically add in.
I haven't checked raw network-format blocks, but compressing a few Core block .dat files, they reduce by about 20% (using a 1MB dictionary).
Maybe it's just an artifact of the on-disk database format.