My definition of a heisenbug is slightly different. For me it is one that disappears when you try to observe it (for example by inserting printf's, logging code or running in the debugger or if it only occurs with particular build setting especially release build only).
Hard to reproduce reliably is a different but closely related category.
I think the proper term for the bug is "race condition", since it is triggered by timing
I first encountered this type of bug back in Z80 days. The fastest possible way to copy memory was using an unrolled sequence of POP/PUSH on the stack; however, if you forgot to disable interrupts while doing this, the data could be corrupted.
I totally agree. I've seen bugs that disappeared once I introduce some print statement. I heard a theory it had something to do with memory management. It's beyond my level of expertise to explain, but I have experienced a true Heisenbug.
Hard to reproduce reliably is a different but closely related category.