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