内側の while がサブシェルで実行されてるから。親シェルから見たら、
break 2 ではなくふつーにサブシェルが終了したようにしか見えない。