Do P2Pool nodes always accept real blocks over share blocks? The standard rule in bitcoin is that if you see two blocks on a chain that has the same work, you accept the one that you saw first as the correct one. 

If this extended to P2Pool chains, some nodes could see share blocks before a real block. Would the P2Pool members not then accept their own pool members real solved block? I would hope not!
The p2pool sharechain and the bitcoin blockchain operate similarly, but independently. I do not believe there is any requirement that a "real" block be accepted into the p2pool sharechain.

What I think you are really concerned about is that the p2pool nodes may see a "real" block and not do their part to get it into the blockchain so that everyone gets paid. On that account you can rest assured.

In the source code, have a look at p2pool/node.py ("GOT BLOCK FROM PEER! Passing to bitcoind!") and p2pool/work.py ("GOT BLOCK FROM MINER! Passing to bitcoind!") Regardless of whether the new bitcoin block ends up in the p2pool sharechain, all nodes who become aware of the block relay it to bitcoind to help get it in the blockchain.