You only need to try to load a web page that contains Google ads while not connected to the internet to see this effect in action. The page will load as far as where the script to load the first Google ad is in the source and will stop rendering at that point at least until it decides to timeout loading that script.
This gives you one reason why scripts that don't contain document.write statements might be better placed at the bottom of the page so that they don't interfere with the rendering of the HTML.
So perhaps a better question should be "when wouldn't you be better off moving the script to the bottom of the page?" since the bottom of the page is the best place to put most scripts.
The second type of script that should not go at the bottom of the page are those that do not interact with the body of the web page at all. There are two sub-categories for this type of script - those where the code in the script is making a decision as to whether to render the page at all and those that gather information about the browser to send to the server. The scripts in the first of these two sub-categories must go in the head of the page so that they can decide whether to render the page or not before it starts rendering. The scripts in the second sub-category can run at any point in the page and will produce the same result and so placing them in the head will send the information to the server slightly sooner while slightly delaying the loading of the page (you'd specify "async" or "delay" on such a script so as to not hold up rendering the HTML in those browsers that support those attributes).
The most interesting thing to notice with respect to this last category of script is that where such scripts are provided by a third party (eg. Google Analytics) the script owners generally recommend attaching the script at the bottom of the web page. The only reason for such placement with this type of script is how the script effects the rendering speed of the HTML.
So taking all these into account the only time the bottom of the page is not the best place to put your script is where it contains document.write or where it needs to be able to stop the page rendering at all.
This article written by Stephen Chapman, Felgall Pty Ltd.