I am not responding on behalf of Tim's specific circumstances as they may have been different, but the problems have typically occurred when some custom and out of the box attributes have been reconfigured as required, and then the upgrade comes along to make some changes (directly to the db or through something like XOG) and because values were not provided for those columns/attributes, it can result in the upgrade halting with an error. In those instances, you have to roll back to the prior version, change the Required attribute setting, and then upgrade again - a costly exercise in time compared to just making a note of your current required attributes and unchecking them pre-upgrade, re-checking them post-upgrade.
For demonstration purposes, let's say you put a required custom attribute called 'populate_me' on project for example. If now the upgrade needs to insert or change a project template, it would not know what to provide for this attribute 'populate_me' and just won't include it, causing an error at either the business logic or db level (since constraints are usually enforced there too). If the attribute was not forced to be required, the action would have succeeded.
It happens less often with out of the box attributes but, unless they were marked as required 'out of the box' to begin with, the same problem can happen there also.