When I got this issue it was due to bad data in a Decimal column. It had 100.0 and not 100.00
In the select statement I used - TRANSFORM(ndepnrate, '@R 999.99') AS ndepnrate
This not only passed the data but fixed the data before it was passed over to SQL.
Every other table accepted select * from tableName and passed over to SQL using SqlBulkCopy