Good news. Thanks for letting us know. What was your timeslice before?
I was using 5 ticks (5 ms) for the main thread and the comm thread. For the led blink thread I was using just one tick.
I wasn't aware that the SPI and I2C communication was non-reentrant, so my reasoning for those short timeslices was that the user would feel more like it's three parallel threads on different cores, instead of three threads taking turns on just one core. Turns out the Teensy is so fast that even if I don't interrupt the thread to do context switching (using a very large timeslice) and only change context using yield or delay, most of the times the threads run for less than 5 ms each anyway. It only takes more time when one particularly slow task which which can't be split in smaller quicker tasks is being executed, like writing to the SSD1306 display via I2C.
All the Teensies are still running without rebooting or crashing. I think we finally managed to solve the issue! I am very grateful for all the help received from this forum! Thanks!