Take a look at the following code:
As you can see, something pretty freaky is going on here.
We put a value in there, and then we try to get it out, we get a totally different value.
The real repro happened in a pretty complex piece of code, and because the old value was different than the value in the debugger, we were certain that we had something that was changing data behind our back. Only after we marked the memory as read only and still saw that behavior we realized that this is actually a debugger eval bug. Instead of reading the Id property as a long, it is reading it as a byte, leading to this misleading value.
Only cost me most of my hair.