Ответ 1
Поведение всегда было в пределах того, что было задокументировано - это просто то, что он изменился от стремления к ленивости в .NET 4.
Я подозреваю, что команде JIT удалось найти способ сделать это ленивым без штрафа за производительность... или, возможно, это помогает производительности в другом месте. Вероятно, это будет только одно из таких изменений в поведении в .NET 4 CLR и .NET 2 CLR... случается так, что я это заметил, но я сомневаюсь, что это сделали многие другие люди. Я думаю, что вполне разумно, чтобы команда JIT могла корректировать ситуацию по своему усмотрению в рамках документированных гарантий.
В конечном счете, если это приведет к сбою вашего кода, у вас уже есть ошибка.