Don't see why shouldn't work. Try using CreateAlias and set fetch model on it or maybe CreateCriteria on the original criteria (although I doubt that fetching mode set on subqueries is handled).
Code:
ISession session = CreateSession( );
ICriteria criteria = session.CreateCriteria( typeof(Category) );
criteria.Add( Expression.Eq( "ID", id ) );
ICriteria alias = criteria.CreateAlias("Artifacts", "a")
.SetFetchMode( "a.Properties", FetchMode.Eager );
IList list = criteria.List( );
Or try using HQL with inner join fetch.