p2pool is connected to the bitcoin P2P network and detects blocks before a getblocktemplate result is available for the new block and present a valid coinbase to miners ASAP. So there's absolutely no reason a "stale p2pool share" block would have more chance of being orphaned than any other block.
I assume getblocktemplate is used to build up the actual block transactions?
I'm not sure how this part works as I'm not familiar with how a block template can be manipulated. I
assume that getblocktemplate is called to get the transactions to confirm in the block and the reward transaction (the one distributing the reward to p2pool miners) is added.
So, there is a window where p2pool miners mine against a block that only contains coinbase?
With 0 transactions in the block, yes.
In fact when I was worried about getblocktemplate latencies I asked if such a mechanism (using an empty block built on top of the just found new block until getblocktemplate returned a result) would make sense and explored alternatives like workarounds/hacks in bitcoind's getblocktemplate. The reply from more knowledgeable people including Bitcoin devs was that there was no need for workarounds as pools were expected to implement this for ages to avoid producing orphans and forrestv confirmed that p2pool was using this technique too.