すいません、今実行環境が手元になくて例外の詳細が貼れません。
バイト配列の内容が原因だと考えた理由は、以下のb1で処理すると例外が発生しないのに、
b2でやると先のODBC例外が発生したからです。
byte[] b1 = { 0xe5,0x65, 0x2c,0x67, 0x9e,0x8a, 0x67,0x31 }; //UTF-16で「日本語で」
byte[] b2 = { 0xe6,0x97,0xa5, 0xe6,0x9c,0xac, 0xe8,0xaa,0x9e, 0xe3,0x81,0xa7}; // UTF-8で「日本語で」
string str = System.Text.Encoding.Unicode.GetString(b1);