Hola  javimartinez!!!
 
Otra solución sería hacer: 
public Object remove2(int index) throws IndexOutOfBoundsException, MiException {
  if (mi condicion)
     throw new MiException("Error");
  else
    return super.remove(index);
}  
De esta forma el compilador no se te quejara de que añades nuevas excepciones al método padre, pero internamente lo seguirias usando. Ademas, volveras a heredar de Collection.  
  
El problema esta claro, tienes que tener el cuidado de hacer la llamada al método correcto. Si lo tuviese que hacer yo optaría por llamar a los métodos xxxxxxCondicionado de forma que me quedaría claro cuales son mis métodos (Pero esto es cuestión de gustos)  
  
Espero te sirva,
un saludo,  
 
kripton