Major pools doing "SPV mining" and trust any block on the longest chain. Really?
That enables pretty obvious attacks have a really big disruptive impact.
It is safe if they implement safe guards.
The assumption for SPV mining is that nobody would create invalid blocks. They still cost the same POW to make, so nobody would bother.
This is a reasonable assumption if it is weakened slightly to "It is very rare for other miners to create invalid blocks". Even with SPV mining, you need to eventually check that the full block is valid.
By building empty blocks on the longest header chain, the pool doesn't waste hashing power during the window when a new block is being verified.
A <- B <- C <- D <- e
In this case, A, B, C and D are fully validated but the full block for e hasn't been received yet. The miner only checks POW.
If the pool mines block E', then it is wasting its hashing power. Even if E' is found, it will be older than e, so will be rejected by the network.
By building an empty block as block F, the hashing power is not wasted. This is a good thing.
The problem starts if block E (full block for e) was actually invalid. In that case, we don't want miners building on top of it.
An easy way to accomplish it is to have a timeout. If you are building empty blocks on block e for more than a minute, assume E was invalid after all and switch back to building on D.
Ties should be broken in favor of the block that is fully validated.
The irony in this case is that the invalid fork could have been detected by only checking the headers, so the full block wasn't even needed anyway.