The ADO.NET driver did not handle some NUMERIC values with precision above 28-29 because it was using the decimal class during the type conversion.
The decimal class is an approximate type and NUMERIC is exact. For more about these classes, see MSDN.
Logic has been modified to avoid converting NUMERIC to decimal types.