Hey Dan, good to hear it. I meant to post here before on this but didn't get around to it. I've solved this problem myself multiple times so perhaps my thoughts will help.
The key is of course you have to send the note off on the same note as the note on, regardless of what the current note-on assignment is for the pad.
With an instrument with a large number of keys, this is more complicated to do in a small RAM space since you have to build a voice allocator. But since the Quneo has a limited number of sensors, there's a simpler approach. Here we are really talking about the 16 pads, which can be up to 64 pads if all are quadrimated/put into grid mode. So what you do is you have a buffer with 64 entries and when you play a note on on any pad, you store the note-number-on and its channel in its corresponding slot. When you have the note off event for the pad, then rather than use the current note on, you look up what note and channel were sent for the previous note-on and send that. Very simple. A nice part about it too is that regardless of what note switching or transpose effects happen, this algorithm doesn't change. And it only uses 64 bytes of RAM to store the whole state for the notes and 8 bytes for the channels (since quadrimated pads share their channel and channels are 4 bits each). Only 72 bytes altogether. That doesn't have to be persistent memory, or per preset - it's just scratch memory.
On a related topic while I'm discussing note on and off, it would be really nice to have release velocity with those note offs, just track the velocity as one leaves the pad and map to release velocity in the note off event. Not many controllers do this, several Alesis instruments do, it allows doing things like modulating the release envelope according to the speed of release, which is useful for controlling note articulation.