|Do you know where your variables are?|
Brilliant list.. ++.
There's one thing I'd add to your "Let people know the tradeoffs" phase, though: Make the requestor handle the negotiations with the people whose projects are being bumped.
'Special' projects are often a symptom of bad communication among management. Officially, management is supposed to allocate resources (including time and labor), and everyone everyone is supposed to buy into the same plan. Unfortunately, it doesn't always work that way. Personal and political issues can keep a group of managers from reaching an agreement, and when that happens, the things they can't agree on tend to get shoved under the rug.
Asking developers to do 'special' projects is one way to shove things under the rug. In effect, a 'special' project can force the developer to make decisions that management was either unwilling or unable to.
That's bad news.
First of all, the developer doesn't officially have the authority or information to make those kinds of decisions. Then there's the fact that doing the project might put some other manager's nose out of joint. Remember, if all of management was behind the project, it would come to you as an assignment from your own boss.
So don't let managers use you as the scapegoat in the cases where they can't do their own jobs. Make them do all the legwork and negotiations necessary to buy you the time and resources you need. That's what they get paid for.
If the project is legit, the requestor will be able to buy you whatever time and resources you need, and everyone will be happy. Everyone will feel involved, and a lot of peripheral work will stay off of your shoulders. Having to get permission to cut in front of everyone else in your work queue will also keep people from deciding that you're a convenient source of free labor. Everyone involved will be reminded that lots of people want your time. That will cut down on frivolous requests and 'Spanish Inquisition' pressure tactics (having the client in the room or on the phone when making the request, so you can't possibly say no).