I haven't looked into this, but when you destroy an instance, the destroy event will modify all Lists that have that instance so that is what is messing with your loop (probably).
Try using can.Observe.startBatch before starting to loop and call can.Observe.stopBatch to fire all fo the destroy events after you are done. This will prevent the destroy events from being triggered until after you have looped through everything.