В общем, оставим для потомков, может когда-то кому-то поможет. Немного исправив запрос получим вот такой результат:
var getBatchOfPlayers = QueryOver.Of<PlayerInfoEntity>()
.Where(entity => entity.IsSimulation == player.IsSimulation && entity.Role.IsIn(roles))
.OrderBy(entity => entity.Login).Asc
.Select(entity => entity.Id) // Исправили Login на Id
.Skip(startOffset).Take(limit);
res = session.QueryOver<ItemsEntity>()
.WithSubquery.WhereProperty(entity => entity.Player.Id).In(getBatchOfPlayers) // Исправили Login на Id
.Cacheable().CacheMode(CacheMode.Normal)
.List().GroupBy(x => x.Player.Login)
.Select(ConvertSpecial)
.ToList();