What strategies can be followed to minimize downtime for patch installs, and reduce the likelihood of encountering problems?

We're currently on 9.2.0.4 and experiencing several database bugs. Heck, one's easy:

select 'asdf' from dual order by 1 desc; <-- causes process crash

All are fixed in 9.2.0.5 but having recently gone to 9.2.0.4 and through the motions of requesting downtime from our user communities, if there is something I can do to minimize downtime, that'd be great.

I've heard of people using logical standby: fail over from primary to secondary, patch primary, fail back to primary, patch secondary, something along those lines. Any other thoughts?

Secondly, what is a good strategy to evaluate the stability of a new patch release, and to prepare for the aftermath? I don't want to get burned again but is 9.2.0.5 going to cure our problems but introduce new ones? How to assess if a given patchset is "stable enough" ?