when a pool makes a blocksolve it knows it has a bit of time to quickly work on another block while the network is propagating its first block. so instead of wasting time collating transactions to make a new blockheader it just begins a 'empty block' and as the asics run through the first few rounds of their nonce/extranonce. the pool then starts adding transactions into a blocktemplate for the next header to send in the next round of hashing once then finished their attempts.
Actually almost all the time it is another pool that miners the empty block because they are "spy mining" and get the successful header before the block is even propagates and start working on the next block right away. Otherwise if it is their own block they don't need to "collect transactions" since they already know what transactions were included in that previous block.
only true at the very second you win that current(first) block to know to base the next block on YOUR previous block, then you can use a template that includes transactions you might have picked for the next block while making the previous block.
however. if you are not lucky to have made the current(first) block then you have to scrap that block. and scrap your blocktemplate of what you hope to be the next block. because someone else solved the current(first) block before you.
so most pools dont even bother pre-empting they will get 2 blocks in a row by having a second template filled with TX's ready.
most pools dont SPV either. instead they know every X seconds is a round of nonce/extra nonce churning a bunch of asic go through, meaning new headers are needed to be sent every X seconds within the average 10min window..
so in the first few rounds. they start with empty block.. and start adding more transactions per round.
(much more efficient this way to start with 0tx and add a few every extranonce round)
its just lucky that they solved a second block quickly.. meaning because they solved it within the first few rounds of churning through nonce and extra nonce of XXX many rounds per ~10min. in those first rounds the transaction count was lacking. because they were lucky to get a block solve quick
..
spv mining is not a large cost saving, nor time saving. but can cause alot of reject risk if they blindly build ontop a block they dont check. so with huge cost at risk vs negligible saving. they see no point in SPV mining, as the saving is not worth it.
the real reason for empty block has nothing to do with spv mining. and everything to do with making a basic block template without transactions where the only variable they need to add is the previous solve hash. and then seconds later, minutes later they add transactions once they purge out the newly confirmed transactions from their mempool to then collate new transactions
..i remember some time ago someone looked at all the blocks that appeared to be solved quickly after a previous block, and seen not only were there empty blocks but also partially filed blocks. whereby they could roughly guess how quick the blocks (in physical time) that second block was actually solved. based on how full the block was.