A couple of years ago empty blocks started to pop up and i never heard a good reason that this would ever happen. The best argument was that it was slightly faster so miners would do it.
I am curious does mining an empty block provide an advantage in solving blocks in any way. For example, maybe the block header is unchanged for an empty block even as new blocks are mined. A miner could simply try and solve the same block indefinitely until the solution is found and they they can stick the empty block into the chain and receive the reward.... Would this somehow provide an advantage over people trying to solve full blocks?
It is indeed faster to mine a empty block. It takes time to validate a new block and construct the next one. A miner may choose to start mining an empty block while they are doing that.
As others have noted, a block header contains the hash of the previous block, so it must change with every new block.
Mining empty blocks is not a good idea. It can happen when nSubsidy = 0 in the following code located in verification.cpp
With Bitcoin 0.18, this would create an orphan, an empty block. It is a consensus rejection. So doing this would block the wallet at starting when synchronizing at the specific transaction and a fork (bug fix) would be necessary to allows Bitcoin to accept the transaction.
You can try on testnet by changing the following code and return 0; see what happens

Empty blocks are not rejected. Blocks with 0 reward are not rejected. If you change
GetBlockSubsidy to always returns 0, then
your wallet will reject all blocks.