Promiň, právě jsem si uvědomil, že bych to měl zveřejnit jako odpověď na otázku a ne jen komentovat... Prosím, nesmějte se tomu "novému klukovi!"
Na základě dalších diskusí a testování se zdá, že tento problém souvisí s tím, že ADO.NET a NHibernate používají sloupce DbType.Date pro MS SQL 2008 datového typu DATE. Pokud by kód používal SqlDbType.Date místo DbType.Date, žádné takové problémy by nenastaly a vše by fungovalo tak, jak je uvedeno.
I když se použití DbType.Date může zdát "přenositelnější" na jiné typy databází, přináší tento problém, protože ADO.NET DbType.Date má omezení na minimální hodnotu 1/1/1753.
Řešením tohoto problému je sdělit NHibernate, že typ sloupce je DATETIME2, který také podporuje hodnoty data dřívější než 1. 1. 1753. Pokud je mapování NHibernate:
<property name="TestDate" type="datetime2">
<column name="TestDate" sql-type="date" />
</property>
Kód funguje podle očekávání bez výjimek.
Je škoda, že NHibernate nerozpozná, že používá dialekt MsSql2008 a nepoužívá SqlDbTypes spíše než DbTypes, ale zdá se, že toto řešení zatím funguje.
Další informace o aspektech ADO.NET najdete na ADO.NET Vložit minimální hodnotu do SQL Server 2008 sloupec Datum selhává . Děkujeme @Graham Bunce za jeho pomoc s tímto.
Doufám, že tyto informace pomohou každému, kdo se v budoucnu setká s tímto problémem.