Причина, по которой это не сработало, заключается в том, что каждое условие where работает с подмножеством данных, которое выдает предыдущий.
Используйте список для логической логики вашего запроса LINQ.
List<int> ids = new List<int>{ 10, 17, 13, 7 };
_Hours = Rep.Where(o => ids.Contains(o.Projects.ProjectGroupID)).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? default(int);
Управляя логическим значением таким образом, вы можете по существу преобразовать список целых в список объектов.
В качестве второго предложения where я вижу, что вам нужен другой атрибут, чтобы еще больше ограничить список. Это будет работать, так как каждое условие where действует по результатам первого, но для удобства читателя это должно быть &&.
_Hours = Rep.Where(o => ids.Contains(o.Projects.ProjectGroupID) && o.Projects.ProjectType == 1).ToList();