El problema supongo es que los índices son ya distintos una vez que borras un objeto de la lista.
Una forma puede ser recorrer la lista al revés, del final al principio, así los índices no se modificarían, al menos no para tus intereses.
Otra podría ser, en lugar de obtener los índices, obtener los objetos seleccionados (puedes hacerlo a través de los índices) y luego se van borrando uno a uno con removeElement(Object o) , método de ListModel.