Почему «ручной» foreach в три раза быстрее LINQ?
Сейчас вы сравниваете версию с селектором (преобразующей функцией) с обычным циклом, вместо этого лучше сравнивать "чистую" версию: 

public static double Average(Dictionary<string, int> stuff) => stuff.Values.Average();

тогда и разница будет не такой значительной.
А вы добавьте [MemoryDiagnoser] к вашему бенчмарку, сразу станет понятно.
Linq аллоцирует память за счет использования итераторов внутри.
А то что у вас в "ручном" методе, скорее всего, преобразуется компилятором в for с доступом по индексу и аллокаций там не будет.