When using Oracle.ManagedDataAccess.Client.OracleDataReader and then calling reader.GetValue(i), we get the exception above.
This can be simulated using this query:
SELECT 1/3 as foo FROM DUAL The problem arises when the oracle data is of Oracle type Decimal, and the precision in the data exceeds the number of decimal places in the .NET decimal. And the main issue is that reader.GetValue(i) does this, so you have no control over the fact that it throws this error internally.
I actually have a workaround, which I will post as an answer since I've hit this a number of times in the past, and the web does not have a good answer yet.
Related:
https://community.oracle.com/thread/4017980
"Specified cast is not valid" when populating DataTable from OracleDataAdapter.Fill()
SELECT 1/3 as foo FROM DUALresult in0? (Maybe Oracle automatically casts to a decimal or float?)