Non l'ho mai usato in uno scenario simile, ma so che
1) se non istanzi direttamente le transazioni, funzioni già di per sé, basta che chiami session.Flush prima di scope.Complete()
http://ayende.com/Blog/archive/2006/06/04/NHibernateAndSystemTransactionsASuccess.aspx2) nella trunk attuale c'è già un supporto in stato embrionale al transactionScope, per cui quando chiami session.BeginTransaction(), avviene l'eventuale enlist nella transazione d'ambiente, se questa è esistente.
m.