AHA! Victory! I’m all set. For posterity and future web searches, I’ll document my discoveries below.
I confirmed that it’s not an issue with my network (e.g. router dropping packets) by spinning up a Plexamp instance on my desktop and connecting to and playing from it just fine. I also used nc -u -l -v -p 32412 (receiver) and echo "'M-SEARCH * HTTP/1.1" | nc -u -b 192.168.1.255 32412 (sender) to test multicast directly.
My network interfaces on the raspberry pi are a little weird - I have both a USB WiFi adapter and I’m plugged in to the Ethernet jack on the back of my Sonos. The latter provides stability, and the former provides speed. I was thinking that either my interface was too old to reliably do multicast (apparently an issue with some devices) and/or the Sonos was interfering with UDP. I isolated those questions by plugging directly into my router instead and still reproduced the issue. These didn’t end up being a problem after all.
What ended up being the culprit is that I’d configured my network interfaces to use static IP addresses with a netmask of 255.255.255.255 (or /32 in CIDR-speak), meaning that the raspberry pi thought it was the only device on the network and wouldn’t receive UDP broadcasts.
Fixing the netmasks to 255.255.255.0 (or /24) resolved the issue!
Thank you so much, Elan, for helping me get to the bottom of this. I wouldn’t know how best to improve the documentation to make this more self-evident, as it’s such a specific case, but the insight that home users rely on UDP discovery was key. Thank you!