Pues seguro que habran otros que te pueden aconsejar mejor que yo.
No he probado tu ejemplo pero teorico ... en la manera que esta pensado al cambiarle de lugar al script estas cambiando tambien la estructura del dom
Cita: devuelve tres elementos.
¿No deberían ser 2?
Pues no deberian ser 2 porque el <script> que tienes despues del <div> tambien cuenta como elemento del DOM. Asi que es correcto si te da 3
Lo que te aconsejaria yo es de cambiar un poco la manera de apuntar a los elementos añadendo id-s por lo menos para algunos que consideras mas importantes e ir a ellos de manera mas segura con getElementById y solo emplear childNodes de vez en cuando para no poner tampoco id a cada elemento
mira unos ejemplos aqui
http://www.w3schools.com/js/js_htmldom_elements.asp
Luego otro consejo que creo que te va ayudar es en vez de alert() ... hacer cequeos con console.log() para ver los mensajes en la consola ( F12 o click derecho en la pagina y luego inspeccionar para que te salga la consola ) ... para otros navegadores buscar en los menus algo como Herramientas de desarollo
Espero servirte saludos