У вас есть как минимум 2 варианта:
Сначала: Используйте группирование по ключевым свойствам вашего словаря, а затем проецируйте значения словаря в группы:
Dictionary<Employee, Report> data;
var groups = data
.GroupBy(x => new { x.Key.Company, x.Key.Position, x.Key.Age }, pair => pair.Value)
.Select(grp => grp.ToList())
.ToList();
Второе: , как сказал @ZRT, вы можете сначала проецировать только значения словаря и группы:
Dictionary<Employee, Report> data;
var groups = data
.Select(pair => pair.Key)
.GroupBy(x => new { x.Company, x.Position, x.Age }, pair => pair.Value)
.Select(grp => grp.ToList())
.ToList();
UPD
Однакоесли вам нужно сохранить отношение Сотрудник -> Отчет, вы можете просто сгруппировать по его ключу:
Dictionary<Employee, Report> data;
List<List<KeyValuePair<Employee , Report>>> groups = data
.GroupBy(x => new { x.Key.Company, x.Key.Position, x.Key.Age })
.Select(grp => grp.ToList())
.ToList();