この時の問題を考えてて、DateTime型についてみてみると。
.NET FrameworkのDateTime型
.NET Framework 2.0 以降では、DateTime 構造体には、Ticks フィールドとプライベートの Kind フィールドとが連結された、合わせて 64 ビットのフィールドが格納されます。 Kind フィールドは、DateTime 構造体によって表される時刻が "現地時刻である"、"世界協定時刻 (UTC: Coordinated Universal Time) である"、または、"未指定のタイム ゾーンの時刻である" のいずれかを示す 2 ビットのフィールドです。 Kind フィールドは、主にタイム ゾーン間の時刻変換時に使用され、時刻の比較や算術計算には使用されません。 Kind フィールドの値は、Kind プロパティで取得できます。
となっているから、SQLServerのdatetime型は2.0より前の.NET FrameworkでのDateTime型にマップしてたってことかな?
SQL Serverのdatetime型
datetime (Transact-SQL)
SQLServerのdatetime型は、「Ticks フィールドとプライベートの Kind フィールドとが連結された、合わせて 64 ビット」の範囲に入らない場合(タイムゾーンやら日付範囲)になると、OutOfRangeExceptionって感じかな。
同じ.NETのDateTime型でも、SQL Serverのdatetime型の範囲内ならInsert/Updateでエラーになんないよ、ってのが.NETのDateTime.Nowでエラーとならない理由と理解してみる。