I wonder how is it possible that none asked this question before. I was thinking about this some time ago and I think there is no mechanism implemented yet to prevent this.
The block header contains the Merkle tree root hash. It is a hash of ALL the transactions in the block. One of those transactions is the coinbase transaction which contains the pool "reward" address.
Simply put a hash is only valid for a particular block header including indirectly the pool reward address. The only way two pools could have the same block header is if all variables were the same (including the reward destination).
Thus any particular hash is only useful to a particular pool.
It is not possible for a miner to
a) keep the block and submit it the network to keep the whole reward.
b) give it to another pool
It is possible for a miner to simply not return the solution. A block withholding attack however only hurts the pool it doesn't help the attacker.
Info on block withholding attack:
http://bitcoin.stackexchange.com/q/1338/307