The "ps not finding itself" problem is usually soluable with pgrep, which is present in Solaris, GNU/Linux, and probably most other modern OSes of similar type. Functionally, it's not really any different than your trick above, but pgrep is so useful I thought it was worth a separate mention.
I would think a better way - rather than looping based on timeout - would be to fork, exec() OOo in the child, and then join the child. That would have the loop effect, but without the constant polling. It would (probably) remove the need to look for the process too, which could be useful (do you know whether or not your user has the ability to talk to the other process, for example? I don't know the answer to that, but I would think it would be an obvious question).