This is what the internet is really all about -- collaboration! A really generous German guy named Stefan fixed a deficiency (bug?!) in my NRPN abstractions. Thanks Stefan!
Previous versions wouldn't allow for controller numbers greater than 127...which is like half the point of even having NRPN (the other half being data values > 127). In any case, his modifications were somewhat simple and necessary and I incorporated them into and updated my pd abstractions page.
In order for me to confirm that the abstractions do what they claim, I used my BCR2000 control surface. I stumbled for quite some time with the nrpn_out.pd code, because the BCR200 was just absolutely refusing to recognize NRPN for a controller above 127. I hooked up a software midi dump (amidi -p hw:2,0 -d) to confirm that the bytes coming out of pd were as expected, and they were.
I feared that my controller was maybe shot or in a funky mode (everything else was working fine tho), and I tracked down a firmware update on the Behringer website. As is usual with this kind of firmware upgrade, it is a miserable Windows-only application, and I ended up resorting to using my wife's laptop to run it. Just once I'd like a manufacturer to properly support Linux...and if that's asking too much, just release the source and let people know how they can write their own. Trust me, given the code or at least a description of how to get the bytes into the device (protocol anyone!), the community will friggin build it for you!
Once the firmware was upgraded, the BCR2000 instantly started recognizing its incoming NRPN messages for controllers above 127. Goodie!
Thanks again for Stefan for helping out and contributing back to a community. It's exactly that kind of thing that helps make things better for us all.