Hola.
La idea que seguimos para los errores es que fuesen lo mas simples posible de forma de simplificar la compatibilidad entre implementaciones.
El razonamiento que seguimos es que cualquier error que se produzca al ejecutar un método se traduce en un "internal error".
Esto implica que no es necesario ver que tipo de error devuelve el método y traducirlo a algún error de la especificación.
El error de "invalid parameters" lo utilizamos solo para el caso de que los parámetros no se puedan leer correctamente y que por lo tanto no pueda invocarse al método.
Espero quede mas claro. Cualquier cosa vuelvan a preguntar.
Saludos