What I ended up doing to solve the problem is this:
Code:
return this.session.CreateCriteria(typeof(pARENT))
.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer())
.CreateCriteria("children")
.Add(Expression.IdEq(chID))
.List<Parent>();
Note the lack of "NHibernate.SqlCommand.JoinType.LeftOuterJoin" in the CreateCriteria call.
My understanding is that normally you use this to pull in an entity and all of it's children in a single call. It has to be LeftOuterJoin otherwise entities with no children will not be included.
Why was this exhibiting the behavior I was witnessing before? A lot of times it seems like there's some magic that NHibernate is doing that I'm not aware of so I'd really like someone to explain this to me.