Почему length === 13?
В вашем примере сразу два косяка

1. там действительно 13 нод (узлов), потому что Node это не только html-элементы, но и текст между ними (переводы строки и пробелы в вашем случае). 
Можно перебирать не childNodes а .children, который возвращает именно html-элементы, а не все узлы. Но это решает не все проблемы, потом что:

2. Указывая не 0 а i вы удаляете не все узлы, а каждый второй.
Дело в том, что childNodes и children это live коллекции и они обновляются при каждом изменении в родительском элементе.
При удалении нулевого элемента первый тут-же становится нулевым.
Затем вы увеличиваете i до единицы, удаляете первый (он изначально был вторым), а нулевой (который был первым) остался, и снова происходит сдвиг. Иногда, кстати, этот сдвиг не упевает произойти, так что этим способом нельзя пользоваться даже если вам хочется удалить именно каждый второй.

Можно бы перебирать с конца for (let i=elem.children.length-1; i >= 0; i--) elem.childNodes[i].remove()

Можно удалять без всяких счетчиков while (elem.firstChild) elem.removeChild(myNode.lastChild)

И наконец, можно удалять вообще без перебора! elem.textContent = '' Это не только самый короткий, но и самый быстрый способ, т.к. браузер не будет пытатся несколько раз перерисовать содержимое elem.
потому что перенос строки/пробелы/табы так же являются нодой.
https://jsfiddle.net/s5kz236b/