I found my error: the 2nd call to tcsetattr (to restore the previous settings) was not always called. A silly copy-and-paste error.
For anyone interested, I have to pieces of code handling the actual input, divided via #ifdef and #elif. One is for Windows and one is for Linux. In the Windows code, I immediately return, while in the Linux code, I set a variable that I return later. But on Ctrl+[letter] combinations, I copied the return and didn't notice it was wrong 😅