@Eric Lippert has explained this in great detail in his two-parts article:
- Closing over the loop variable considered harmful
- Closing over the loop variable, part two
It is a must-read article, as it explains the behavior in depth and at implementation-level.