I am hesitant about agreeing with the consensus provided. When a model is destroyed, the "destroy" event moves through any collection that contains the model. Therefore, when you destroy a model, it should not be necessary to also remove it from the list.
model.destroy();
This should suffice.
Upon reviewing your code, it appears to be accurate: (Assuming the purpose is to both destroy + remove, not merely remove)
list.get('01').destroy();
Are you certain that your resource is being properly destroyed? Have you attempted adding success and error callbacks in your destroy() function to confirm that the destroy operation was carried out? For instance, if there is an issue with your model's URL and it cannot access the resource, the destroy call might fail and the model would remain in the collection. This would result in the issues described in your question.
If you place the remove() method after the destroy call, then the model will definitely be removed from the collection. However, the model will still exist elsewhere (persisted). This could align with your intention, but considering you are using destroy(), I assume you intend to completely obliterate it. Although remove may appear to work, it only hides the fact that the model has been destroyed when it may not have actually been.
Hence, my suspicion is that something is preventing the model from being properly destroyed. This explains why even after calling destroy() and checking your collection, the model remains present.
It's possible that I'm mistaken. Could you please verify this and update us on your findings?