all my old code started throwing warnings where it hadn't before, which caused compilation errors, and I started getting emails from random people saying my code was busted.
Compiler switching doesn't occur very often, and if it does you indeed need to patch your code, if necessary, before committing. A warning is not the compiler trying to annoy you, it's an indication that something that is wrong with your code. It might be an indicator of a bug. If another compiler informs you with warnings, I would choose to fix these warnings, rather than disabling them. Internally our buildserver for instance, makes sure that all code that we produce compiles for the PC, Wii and DS... warning free. If some code produces a warning (=error), the responsible programmer immediately receives an e-mail asking him to address the issue. Having multiple compilers (and possibly PC Lint) check your code for warnings, definitely solved a lot of potential bugs for us.
The more complex a project becomes, the more urgent it becomes to define a good warning/error policy.
But -Wall -Werror has bitten me personally in the past, and I don't think it's a good idea to use it in any project that you release the source for and expect people to compile it themselves.
I don't see why not. Of course Bullet needs to indicate what compilers it supports, so people won't complain that the code breaks on compiler X.
I personally feel -Werror is never useful. As a developer I want information from my tools. I don't want my tools to disobey my instructions (i.e. fail to create an executable) unless the problems are so severe that they are forced to give up.
Unfortunately I strongly disagree. IMO -Werror is *always* useful. The information you get from the warnings is an indication that something is (seriously) wrong with your code. If you have unused variables, unreachable code, hided virtual functions (all part of the current Bullet trunk), you can of course choose to ignore them and ship the code. However a much better practice is that people fix these issues first.
Unfortunately when not enforcing warning = error, people are not forced to do so causing warnings to slip into the project again. As a matter of fact, I completely got rid of all warnings produced by MSVC9.0 (and the Wii compiler) in Bullet 2.67. When I upgraded to 2.72 a buckload of new warnings where introduced. It took me a couple of hours again to make the latest Bullet version warning free again, however IMO it would be better if some policy is introduced here that forced people to commit warning free code. And be honest; what's wrong with warning free code?

It won't hurt anyone, in fact, it will help you to create better code!
Of course we can have a debate on exactly what warnings are useful and which ones aren't. But the useful warnings that we can agree upon, should definitely be enforced IMO.
Just my two cents