в одно из них может попасть 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>