I posted this on the coursera discussion area but I'm not sure how visible that is.
There should be enough information to explain (and reproduce) the issue over at
https://github.com/purple-pixie/nand2tetrisbug/ but in short, while inside the body of Sys.init, the Sys class seems confused about where its static variables reside, and just addresses them as RAM[16+static_variable_index] i.e. its first static variable will be written/read from RAM[16], its second from RAM[17].
While in other functions of Sys (or at least custom ones, I didn't test inside of other API-required functions) it is able to correctly address its own region of the static segment, and not clobber the statics belonging to other classes.
Edit: After a bit of thinking about it, it seems reasonably intuitive that the root cause is how the VM "calls" Sys.init in the first place - however it's doing that doesn't specify that the currently-executed class is Sys, which in turn means it doesn't know where to look for statics.
Somewhat amusingly, it was my inability to make the breakpoints work in just the way I wanted that let me find what was going on - I decided to move the static assignments out of init and into a separate function called by init, so I could set a breakpoing on currentFunction, and as soon as I did that the problem magically disappeared.