На каждой итерации внешнего цикла внутренний цикл начинается
заново - с создания переменной j, инициализации её значением 2 и т.д.
При выполнении break прекращается
только внутренний цикл. Внешний как выполнялся, так и продолжает выполняться - пока значение i не достигнет 100.
С точно тем же результатом внутренний цикл можно было бы записать без break:
for(int j = 2; isPrime && j < i; j++) { isPrime = i % j != 0; }
P.S. А алгоритм, мягко говоря, не блещет. Банальное решето Эратосфена намного эффективнее:
boolean[] arr = new boolean[100];
for(int i = 2; i < 100; ++i) {
if (arr[i]) { continue; }
for (int j = i * i; j < 100; j += i) { arr[j] = true; }
System.out.print(i);
System.out.print(' ');
}