Respondendo minha própria pergunta:
Portanto, parece que o tipo de número do Oracle pode conter muito mais casas decimais do que o tipo decimal do C# e, se o Oracle estiver tentando retornar mais do que o C# pode conter, ele lançará o InvalidCastException.
Solução?
Em seu sql, arredonde quaisquer resultados que possam ter muitas casas decimais para algo sensato. Então eu fiz isso:
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
E funcionou.
A conclusão é:Incompatibilidade entre o tipo de número Oracle e o decimal C#. Restrinja as casas decimais do Oracle para evitar exceções de conversão inválidas.
Espero que isso ajude mais alguém!