I often have problems during upgrades using the proprietary drivers. The solution is usually: 1. Uninstall proprietary drivers. 2. Reboot, make sure the fallback mesa/vesa works (i.e. you can boot to graphical login). 3. Install proprietary drivers again. 4. Reboot, make sure the graphical login works, then run glxinfo | grep -i opengl, and make sure the renderer is GeForce or Radeon or whatever, NOT "Mesa".
Yes, it's stupid, and yes, we shouldn't have these problems in 2013, but the proprietary drivers tend to just have more compatibility issues.
I just upgraded to an SSD and decided to clean slate rather than carry extra fs creep baggage that isn't linked to a package to remove, but I still have that partition around, and I'm pretty sure if I upgraded it it might still boot.
It is why I like rolling releases - rather than have catastrophic breakage every half year, you continuously migrate upwards. It means occasionally you need to pull up a web browser to see why your desktop is missing, but its better than doing a dist-upgrade and getting an unbootable system.
Today's upgrade was pretty smooth and uneventful.
I've been upgrading Ubuntu Desktop for years (a decade, singular) and I've always been struggling - especially if I ventured to install an alpha and then keep upgrading that. Compared to OS X, on which I always upgrade to the first Developer Preview and keep upgrading on, although OS X comes with problems, too, the GM usually fixes it all up. With Ubuntu, it's best to script your environment and rebuild clean. At least my experience. Garbage always piles up otherwise!
I've found that keeping your old /home around and a copy of installed packages works well enough for most situations.