To break it down
Nullable column pulled into a non-nullable field forces NHibernate to create the smallest value it can.
NHibernate then checks for any changes, expecting a null on that field but finding a value.
Object now considered dirty because value has allegedly changed.
NHibernate performs an update before it pulls back the data agian.
So the fix was simply to make the DateTime in the object a DateTime?, a nullable DateTime. That got rid of the false update, and fixed my queries. Simple when you know what the problem is.
So the moral of the story is: Make sure everything is in sync - schema, mappings and POCOs.