As a developer, I think I have a pretty good grasp on what a Program Manager (PM) does, at least at Microsoft, because I have had to interact with so many of them in my career. My assumption is that what a PM does is entirely dependent on what team he is on. For the most part he is the central point of head-on colisions between what one group believes should be in the product, and what the product team actually works on. There is a lot of diplomacy involved, since the PM has no real authority to tell any team what to do. I once heard someone say that it is the equivlent of managing a process or a feature, with total accountability, but no managerial authoirty.
I stumbled into a good explaination of a PM by Chris Pratley.