Eventually figured out that this line in the stack trace:
NHibernate.Impl.SessionImpl.Flush()
Was indicating that there was a standard Session (not stateless) with pending changes in this transaction that needed to be flushed, still not sure why it waited till after the dispose to flush them. Either way, I fixed this by flushing the standard session as well as the stateless one before disposing the unit of work