Ошибка в том, что нужно делать 3 разных цикла, в первом цикле нужно собрать сначала все разделы 1 уровня, затем во втором цикле все разделы 2 уровня, и в третьем цикле разделы 3 уровня, и хорошо бы добавить
в массив
array("DEPTH_LEVEL" => "ASC", "LEFT_MARGIN" => "ASC")
Дело в том, что вы используете
$newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
в момент, когда
$newSection[$sectionLvlOne]
еще может не быть задан, потому что раздел 1 уровня в цикле может быть получен позднее, чем раздел второго уровня.