Miners do not currently have a monetary incentive to fill up blocks with transactions (tx fees are negligible compared to the coinbase tx). Those miners that do fill up the blocks may do so with the long-term interests of the network in mind.
It seems clear to me that making the coinbase amount a function of the relative size of the block would result in a much better incentive. I cannot see any obvious drawbacks with it.
A simple formula would be: actual_coinbase = coinbase * (actual_block_size/MAX_BLOCK_SIZE)
For example: actual_coinbase = 25BTC * (512KB/1024KB) = 12.5BTC
Of course the actual implementation would have to take into account consensus issues (rounding, corner cases, etc), but it should be possible.
Why would this not work?