OK I tracked down what's really going on. Radiohead.h has this piece of code:
#if (RH_PLATFORM != RH_PLATFORM_ESP32)
#ifndef SS
#define SS 10
#endif
#endif
Unless you specifically call the constructor with numeric SS/IRQ pins, the SS will get redefined to value 10. That is fine if the hardware SS is indeed 10 but not otherwise.
This is because on SAMD variants the SS is a numeric variable and not a #define. For my internal testing I was using a modified example where I was conditionally and explicitly passing the SS/IRQ to the constructor based on the board (overriding whatever was in the library), and hence the explanation why my test sketch worked on the RFGatewayM4, but not the stock example.
The simple solution to this, without further modifying the RadioHead library to remove that
#ifndef SS check, is to either:
1) call the constructor with specific values (this is always the best insurance if somehow the variant you're using doesn't use #define SS):
2) Update to the latest 1.6.3 Moteino SAMD package which I just patched to add the "#define SS SS" so the "#ifndef SS" in RadioHead.h won't fail. You can do this easily in the BoardManager.