I work in the system test field. My job is to test the software loads headed for field deployment. There are many opinions expressed here and all are in their own way valid. Anyway I though I would give my perspective as a system test engineer with the responsibility of delivering both firmware and software upgrades.
I only upgrade if the package being offered is addressing an issue I am currently suffering from or offering a feature I am interested in. The only exception is if I get a warning from the manufacturer stating that if I do not upgrade, the world will end, or I run the risk of loosing all my pics or such. I have several reasons for this.
1. For every 10 fixes one new bug is introduced. This is pretty much an industry standard and applies to just about any software project. So, I might get 10 fixes to things I would never use and end up with a problem I didn't have before.
2. Developers many times add in fixes for other problems without following the process set up to introduce those fixes. There are many reasons for this and I wont get into it now, but it happens.
3. The testing of firmware/software fixes does not have the same level of testing as the firmware/software before release. Usually the team testing firmware is a fraction of the whole test team testing the mainline release.
4. There is always a risk when upgrading a functioning system. As SmuckerS2 said so eloquently, If it ain't broke, don't fix it.
5. Problems introduced in fix releases are usually much harder to detect. This has to do with the reduced scope of retest and software interactions.
6. Many times the programmer making the fix is not the same one who wrote the original code. The fix is applied but not in the same elegant manner the original code was. It could run slower, be less stable, or have other strange side effects.