Blocks that are fuller, and contain more transactions, both propagate around the network more slowly and take more time for other nodes to validate1. Both of these things increase the chance of a miner's block becoming an uncle and reduce the chance of getting the full block reward.
Miners, therefore, have to decide whether to increase the number of transactions they include (leading to increased transaction fees), or reduce them (leading to a greater chance of winning the block reward).
They also have to take into consideration what they think other miners are doing, and the current gas prices, which is where game theory comes in.
Can't we incentivize miners to include more transactions in their block?
If all miners are under-filling their blocks repeatedly and continuously, then it's probably a signal that gas prices are too low. At some point, users of the network will realise that they're waiting too long for their transactions to go through, and push the gas prices up until a new equilibrium is reached.
1 Firstly, blocks containing more transactions are essentially bigger, as they contain more data. A larger chunk of data will take more time to propagate around any network.
Secondly, blocks containing more transactions are likely to involve more changes to the world state (e.g. updating accounts, changing the values of variables associated with contracts, etc.). When a miner successfully mines a block, they have to let the rest of the network know about it before it's considered canonical. When the other nodes in the network receive the new block, they have to check the transactions are valid - this is validation. The more state changes, the longer the validation will take. If, in the meantime, another miner propagates a smaller version of the same block around the network, then it's possible a larger part of the network will validate that smaller block more quickly, leading to the smaller block being accepted as canonical. The first miner loses out on the block reward.