Moz - I agree with your points, you should always recognise the talent already within your organisation, whenever possible. But allowing agency (or other external applicants) to be considered gives you the opportunity to select the best person for the job, and to compare what your internal applicant has to offer or might need to develop before being truly ready to step up.
Having said that, there are plenty of times that an organisation might publicise positions internally only, knowing full well that they have an existing pool of talent capable of the step up (particularly if you are running leadership development or succession management programmes). The message you want to send to your employees will dictate what you do when calling for applications, but the actual result (who gets appointed rather than who you consider) will provide the strongest message. After all - what could be better than being able to say "once again we went to the market, and once again we found our own staff who have been through our development programme to be the best candidates for the role" ?
Also, if there are strong candidates out there - an agency employee or in the wider community, surely you want to keep them interested and signal to them that you consider them to be skilled and worth consideration for employment with you? A similar, yet subtly different message to the one you are sending to your interal applicants?
I guess that's another example of the balancing act between the various shades of grey that we in
HR are expected to walk on behalf of the organisation?
Cheers
Pete