I would say that it's expected.
You set a loop with values 0-2. Then Next is executed, the counting var is incremented, the loop "finds" it's greater than your upper limit and so exits the loop. Log shows this final values (i.e 3).
I guess NEXT will add 1 to the value.
THEN it returns to the for line which then ignore the new value because the requirement do not match. Means you are leaving the loop at the for-line then; not at NEXT...
B4X:
For y = 0 To 2
For x = 0 To 2
'do nothing
Log(x)
Next
Next