If I were doing that, I would use -blocknotify to trigger my parser, and I'd keep track of the last X block hashes that I've seen. This would never get stuck, and should be able to handle catching up after being offline for a while. Just in case though, you could look for the new block's prevHash, and work backwards until you reach a block that you already know.
No matter what, you are going to need some means of dealing with orphans and reorgs, but this way it would be just for your totals.
Blocknotify doesn't fit very well with my design pattern, because I would need to make sure bitcoind stopped immediately whenever my app stops, or I would get out of sync.
Is there nothing I can check on the block itself to determin whether its orphaned?
Cheers, Paul.