Das liegt an der Break-Anweisung. Der Compiler stellt nach dem Break den aktuellen Schleifenindex zur Verfügung.
Nein, außerhalb der Schleife ist die Schleifenvariable per se immer "ungültig".
Ja, es kann "zufällig" mal sein, daß die Variable danach noch den selben Wert hat, aber wenn hier eine der möglichen Optimierungen zuschlägt, dann war's das damit.
* der Compiler lässt intern die Zählung eventuell rückwärts laufen, wenn er das für optimaler erachtet
* oder er lässt die Variable wärend der Schleife in einem der CPU-Registier und kopiert es danach natürlich nicht in die Variable auf dem Stack, da das sinnlos wäre, weil laut Definition danach die Schleifenvariable nicht mehr verwendet wird.
* ...