Код некрасивый. Последний кусок с ошибкой.
Вы передаёте вместо индекса с которого удалить объект сам объект в removeChildAt.
Я подозреваю, вы хотели написать просто removeChild.
Но так или иначе, один(последний добавленный) элемент массива удалён не будет, сами угадайте, почему.
Добавлено через 2 минуты
И прикол в том, что вы скорее всего случайно удалили сам MainTimeline из DL

Поэтому ссылка на stage пропадает, скорее всего, и вылетает эта ошибка.
Добавлено через 8 минут
Секунду, на лицо непонимание различий между stage.addChild и просто addChild.
Объясняю: stage.numChildren == 1 в самом начале.
trace(stage.getChildAt(0)); == object MainTimeline.
На сцене находится главная линия времени.
Когда вы пишете addChild(item), вы неявно используете this.addChild(item), тоесть добавляете item не рядом с MainTimeline, а в дисплей лист самого MainTimeline(который изначально пуст). Удаляя item из stage не удалит объект, который вы добавляли в Main, так как его попросту там нет.
Да, stage.contains(item) выдаст true, потому, что этот метод учитывает вложенности.
Добавлено через 12 минут
P.S. код очень некрасивый.