Why is everyone encouraging the use of P2Pool as the answer to the 51% problem? As I understand, P2Pool has some problems, since it's just a separate blockchain with a shorter time between blocks, small miners still have more variance, and, hypothetically, if the time between blocks were 10 seconds and each new block took 0.5 seconds to be received by a miner, then the miner would be wasting 0.5/10 seconds working on an old block. So, basically, if the time between blocks is reduced to lower variance, the miners will waste a larger percentage of time and lose money.

Why don't pools just use the BitPenny approach of having the mining client verify that the pool owner isn't trying to mine double spends?
BitPenny seems to be half the solution - it has centralized control, but its clients can verify it behaves nicely in some sense. But it still has central management. A 51% pool can pull off subtle attacks that aren't prevented by BitPenny. For example, it can prune competitors' blocks, which is not always detectable due to the network latency. It can also block certain transactions or all of them. See this Hacking Distributed post for more details. BitPenny won't always detect this behavior. 

P2pool is the full solution - it is a truly decentralized mining pool with no central control. There is no entity that can wield its power to do anything other than honest mining.