Consensus requires every block to contain a coinbase transaction and requires nothing else. A block with only the coinbase is valid, extends the chain like any other and pays its miner the subsidy, but it confirms no one's payment and leaves the waiting fees on the table.
A common cause is timing. When a new block arrives, a pool that wants to waste no work can move its miners onto the new tip before it has validated that block's transactions and built a fresh template. Anything found in those first seconds is safest left empty, because the pool cannot yet know which waiting transactions the new block already confirmed.
Counting empty blocks per pool label shows that practice on chain. The count says nothing about intent.