Yes, this is definitely a jitter optimizer bug. The reason other SO users have trouble reproducing it is because only the x64 jitter appears to have this bug. You must set the project's Platform target to AnyCPU, untick the "Prefer 32-bit" option on VS2012 and up.
I haven't looked at the underlying reason closely enough but it appears to fumble at trying to eliminate the common step + 1000
sub-expression. Sub-expression elimination is one of the standard jitter optimizations. But it incorrectly incorporates the expression code inside the loop instead of keeping it out of the loop as written. You'll for example see the bug disappear when you write:
dummy = step + 999;
This bug is still present in the latest .NET 4.5.1 version (clrjit.dll, v4.0.30319.34003 on my machine), also present in the v2 jitter (mscorjit.dll, v2.0.50727.7905 on my machine).
The code is a bit too synthetic to recommend a solid workaround, you already found one anyway so you can keep motoring on your project. In general, I'd recommend you eliminate the sub-expression yourself with:
int index = x + dummy;
It should be reported to Microsoft, you can so so by posting a bug report at connect.microsoft.com. If you don't want to take the time then let me know and I'll take care of it.