An expensive selector runs more times than expected. Why does count2 cause the projection to run a second full time?
int calls = 0;
var projected = source.Select(x => { calls++; return Transform(x); });
int count1 = projected.Count();
int count2 = projected.Count();
// calls == source.Count * 2