Another way to defeat this system is to declare the block invalid or do not show the block (pretend, that it wasn't solved).
Easily detectable. Obviously the pool must send the miners the block hashes that they're working on. If your client remembered this data then you could easily check to see if any blocks you've previously worked on showed up in the chain.
Obviously few people would actually check, but it only takes one. The situation could be made better by getting the common clients to make a permanent log of all the blocks their system actually solved, alone with a blockexplorer URL. Few people would pay attention to all the blocks, but I think many people would pay attention to the few blocks where their node was the actual solver.