Kost-iv,
цикл нужно идти с конца tags либо в самом цикле проверять не длину а наличие 1 элемента
for (i = tagLen-1; i ; i--) -- 1 вариант
for (;i = tags[0];)if (i.childNodes.length)
-2вариант
тоже самое для цикла с j.
связано с тем что вы удаляите элементы из tags а это живая коллекция
код надо уточнить - но причина эта.