Read the Arduino source again and realised things were less interrupt-safe than I assumed, now matches current behaviour exactly