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?