In general, ANY bit-banged protocol that's generated in software, whether it's SHIFTIN/SHIFTOUT/SERIN/SEROUT is going to be unreliable when used with interrupts running. That's one reason hardware peripherals exist.

A software-based receiver is notoriously unreliable even without interrupts since there's no buffering at all.

You can get simple examples and tests to work, but they'll be extremely fragile.