Tuve un problema parecido y el problema se da porque falta de conocimiento sobre el método
Remove
En mi caso era con otro tipo de objeto, pero no recuedo cual.
Si tienes 20 elementos al llamar al método remove quitas un elemento por lo tanto ahora quedan 19. Ahora supente que vas a mover los elementos del 16 al 20, entonces cuando hagas un remove del 16, el 17 se convierte en 16, el 18 en 17, el 19 en 18 y el 10 en 19, por lo tanto provocando que tu ciclo apunte a un elemento inexistente porque ahora ya no hay 20 elementos si 19.
Espero te ayude esa explicación.
Saludes