Confusión de alcance variable en C #

Tengo dos ejemplos de código. El primero no compila, pero el segundo lo hace.

Ejemplo de código 1 (no compila)

public void MyMethod(){
    int i=10;

    for(int x=10; x<10; x++) {
        int i=10; // Point1: compiler reports error
        var objX = new MyOtherClass();
    }

    var objX = new OtherClassOfMine(); // Point2: compiler reports error
}

Entiendo por qué el compilador informa un error enPoint1. Pero no entiendo por qué informa un error enPoint2. Y si dice que se debe a la organización dentro de MSIL, ¿por qué se compila el segundo ejemplo de código?

Ejemplo de código 2 (compila)

public void MyMethod(){

    for(int x=10; x<10; x++) {
        int i=10; 
        var objX = new MyOtherClass();
    }

    for(int x=10; x<10; x++) {
        int i=10; 
        var objX = new MyOtherClass();
    }
}

Si las reglas simples de alcance variable se aplican en el Ejemplo de código 2, ¿por qué esas mismas reglas no se aplican al Ejemplo de código 1?

Respuestas a la pregunta(4)

Su respuesta a la pregunta