Well, it turns out this is a chrome bug after all, and pretty much what I had thought it was: changing <use> elements around breaks under certain circumstances. Those circumstances are basically: when the svg spritesheet isn’t cached in the browser.
https://code.google.com/p/chromium/issues/detail?id=580809
Fixed in canary (M50), might get merged in to M49.
The workaround is to set a cache-control header on the SVG spritesheet that is more than zero. That also helps explain why I only saw this bug in my testing server and not in production – I have different cache settings on my beta box.