Respondiendo a mi propia pregunta:
Por lo tanto, parece que el tipo de número de Oracle puede contener muchos más lugares decimales que el tipo decimal de C# y si Oracle intenta devolver más de los que puede contener C#, lanza la InvalidCastException.
¿Solución?
En su sql, redondee cualquier resultado que pueda tener demasiados lugares decimales a algo sensato. Así que hice esto:
SELECT acct_no, ROUND(market_value/mv_total, 8) -- rounding this division solves the problem
FROM myTable
WHERE NVL(market_value, 0) != 0
AND NVL(mv_total, 0) != 0
Y funcionó.
La conclusión es:incompatibilidad entre el tipo de número de Oracle y el decimal de C#. Restrinja sus lugares decimales de Oracle para evitar las excepciones de conversión no válidas.
¡Espero que esto ayude a alguien más!