Los cierres se comportan de manera diferente en los bucles for y foreach

Mientras experimentaba con los cierres en C # descubrí que funcionan de manera bastante inesperada si capturan una variable iteradora en un bucle.

var actions = new List<Action>();

foreach (int i in new[] { 1, 2 })
    actions.Add(() => Console.WriteLine(i));

for (int i = 3; i <= 4; i++)
    actions.Add(() => Console.WriteLine(i));

foreach (var action in actions)
    action();

El código anterior produce un resultado extraño (estoy usando el compilador .NET 4.5):

1
2
5
5

¿Por qué es el valor dei capturado de manera diferente para 2 bucles casi idénticos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta