1. Time for the first completed block to be propagated from the miner that "solved" it, to the pool that miner was participating in, to the pool that will solve the second block, to the miner that will solve that second block.
2. Differences in clock time between the two pools that build the two blocks.
3. Time for the second pool to verify the first block, and then build the second block.
4. Any alterations made to the timestamp in the process of solving the second block.
not quite.
pools create the block and the datahash of the block. they only send the hash to the miners and miners only send a hash back that represents the solution with the correct amount of leadings zeros
ASICS do no store block data. they only receive. process and send hashes. nothing more
here is where the real efficiences are in empty blocking.. first lets show what takes the time.
1. most pools wait for opponents solved block to then confirm that block.
2. remove those confirmed tx from the mempool to know whats leftl in mempool is unconfirmed tx
3. grab transactions from mempool to ensure their new attempt only has unconfirmed transactions added.
by doing 'empty block' pools can skip all 3 steps and just make a block using just the opponents hash without even bothering to confirm the block or the tx content
this can save minutes.
opposing pools do treat blocks as valid based on fastest first to be valid gets kept. but this is based on received time into the node not timestamp time of the block.
if timestamp was even a thing. pools would just put a time stamp 20minutes earlier each time and win. even if it took them 22 minutes to complete