The block being hashed includes the 50BTC transaction awarded to the generator. So a client must decide (before looking for hashes) whether it is hashing a block that will pay itself, or a block that will pay the server. It can't find a hash first, and then decide who it is for.
So there's no risk of cheating. If the client is looking for hashes that will pay itself, it's not participating in the shared mining and won't have any low-difficulty results to send back to the server either.
EDIT: Actually I do see a very serious problem here since the winning miner needs to be sure that anyone he relays the block to doesn't simply change the reward adress to its own.
You don't have good reading comprehension. I bolded the relevant parts for you. The miner cannot change the block's payout address.
My point is that pooled mining should be looked upon as a flaw in the protocol, not a feature. The centralization that pools create was never intended. When pooled mining was created everyone was saying "Oh cool, this reduces variance" when they should have been like "Oh fuck, this creates unnecessary centralization while adding nothing for the end users, can we patch it somehow?" I don't know if the protocol could be changed to make pooled mining heavily disincentivized, and I think you should be very conservative with protocol changes, but it's worth some thought at least.
P2Pool seem cool though, and is definitely an improvement. The problem is that it relies on other people to voluntary switch to it, which won't necessarily happen (just look at how many are unwilling to switch to a smaller pool). Pool owners are those who are most heavily incentivized to spread the idea of bitcoin mining, and their incentives certainly don't point towards P2Pool. So to truly decentralize bitcoin, we need something more.