I do the same as you. I only perform an upgrade to 1 module in a week/night. This way I have time to work with support if the upgrade fails or blows up the environment.
I have noticed that 9 times out of 10 when an upgrade fails it is due to either table corruption in the db or one of our custom indexes couldn't be dropped by the upgrade. Makes for a long night at times, but I have had several upgrades go through successfully with no issues.