I used the example programs to test the interface. They work like a charm for both combinations (M0 as master and nRF as slave and vice versa). Makes me feel kinda stupid, I have to admit.
Nevertheless, from here on we can start debugging again and see where it breaks down...
Result: The program stops woring once I add
Wire.setClock(100000UL); // also tried without the "UL" postfix
on both programms.
Which is super weird because the clock period I see on my oscilloscope is 10us, which corresponds to 100kHz. I.e. the Wire library defaults to 100kHz. So what is wrong with .setClock()!?