Вы не удаляли пули из массива, таким образом пули пытались удалиться повторно при следующей проверке на выход из границ.
Добавлено через 2 минуты
т.е. в принципе, если делать

Код AS3:
ammo.splice(ammo.indexOf(missile), 1);
должно работать и без

Код AS3:
contains(missile)
Добавлено через 5 минут
да, и обход лучше делать не по оригиналу массива, а по его копии

Код AS3:
for each(var missile:Missile in ammo.slice()){
//...
}