Why do mined blocks tend to vary so much in size. If the miner's objective is to maximize their revenue from transaction fees they should add transactions starting with the one with the largest fee, working down to the one with the lowest until the pool of waiting transactions is empty.
If you look at recent blocks on https://blockstream.info/ (as of today, Aug 15 2020), nearly all blocks are very close to 4000 kWU. The variation is due to availability of sufficiently small transactions to fill up the last part, and differences in selection algorithms.
Occasionally, an empty block appears instead. These happen as a result of pools learning about a new block faster than they can construct a new template on top, and inform all their hashers. Instead, the instantly tell everyone to start working on an empty block (which is definitely valid), and only when a new full block template is constructed do they inform the hashers of it. This is exacerbated by validationless mining, where the pool may learn about the new block hash tip, before actually having even seen the new block.
So, as far as I can see, in recent times with sufficient pressure for demand, effectively all blocks are full, except for empty ones occasionally.