Przepraszam, właśnie zdałem sobie sprawę, że powinienem to opublikować jako odpowiedź na pytanie, zamiast po prostu komentować... Proszę, nie śmiej się z "nowego faceta!"
Dzięki dalszym dyskusjom i testom wydaje się, że ten problem jest związany z wykorzystaniem przez ADO.NET i NHibernate kolumny DbType.Date dla MS SQL 2008 typu DATE. Gdyby kod używał SqlDbType.Date zamiast DbType.Date, takie problemy nie wystąpiłyby i wszystko działałoby zgodnie z opisem.
Chociaż użycie DbType.Date może wydawać się bardziej "przenośne" dla innych typów baz danych, wprowadza ten problem, ponieważ ADO.NET DbType.Date ma ograniczenie minimalnej wartości 1/1/1753.
Obejściem tego problemu jest poinformowanie NHibernate, że typem kolumny jest DATETIME2, który obsługuje również wartości dat wcześniejsze niż 1/01/1753. Jeśli mapowanie NHibernate to:
<property name="TestDate" type="datetime2">
<column name="TestDate" sql-type="date" />
</property>
Kod działa zgodnie z oczekiwaniami, bez wyjątków.
Szkoda, że NHibernate nie rozpoznaje, że używa dialektu MsSql2008 i używa SqlDbTypes zamiast DbTypes, ale to obejście wydaje się działać na razie.
Aby uzyskać więcej informacji na temat aspektów ADO.NET, zobacz ADO.NET Wstaw wartość minimalną do kolumny Data SQL Server 2008 ulega awarii . Dziękuję @Grahamowi Bunce za jego pomoc w tym.
Mam nadzieję, że te informacje pomogą każdemu, kto napotka ten problem w przyszłości.