в одно из них может попасть HTML комментарий, или текстовый элемент, которые тоже являются элементами, и тогда firstChild не будет таким же, что и children
<body>
<!-- комментарий -->
<b>элемент</b>
</body>
<script>
alert( 'firstChild: ' + document.body.firstChild + '\n' + 'children[0]' + document.body.children[0] );
</script>
<body>
просто текст
<b>элемент</b>
</body>
<script>
alert( 'firstChild: ' + document.body.firstChild + '\n' + 'children[0]' + document.body.children[0] );
</script>