I’ve done some testing and bank select sure is one of those things were every manufacturer has done pretty much its own thing.
Roland D-05
When you change a patch using the buttons on the D-05 itself, it always sends a bank select. The D-05 never sends only a Program Change message, even if you choose a patch within the same bank.
When changing to P1-11, the D-05 sends:
0xB0, 0x00, 0x57 (bank number MSB)
0xB0, 0x20, 0x08 (bank number LSB)
0xC0, 0x00 (program change)
And when changing to U2-88, it sends:
0xB0, 0x00, 0x57 (bank number MSB)
0xB0, 0x20, 0x01 (bank number LSB)
0xC0, 0x3F (program change)
Even though the preset banks come before the user banks on the hardware, the user banks are numbered before the preset banks in the bank number LSB.
What’s seems rather weird to me is that it sends a MSB with a fixed value. This means that using the full 0-16383 range according to the MIDI specifications, the U1-U8 and P1-P8 banks would be numbered something like 11136 - 11152 which seems inconvenient.
The Roland D-05 will still happily change banks when you leave out the MSB. This means that sending the following is equivalent to the examples above:
Instead of the above, you can also change to P1-11 on the D-05 by sending:
0xB0, 0x20, 0x08 (bank number LSB)
0xC0, 0x00 (program change)
And you can also change to U2-88 on the D-05 by sending:
0xB0, 0x20, 0x01 (bank number LSB)
0xC0, 0x3F (program change)
However, when you try to perform a bank select with the MSB set to a different value, the D-05 will ignore any further program changes until you send a bank select with the MSB set to 0x57.
Pioneer Toriaz AS-1
When you change a patch using the knobs on the AS-1 itself, it always sends a bank select. The AS-1 never sends only a Program Change message.
When changing to U1 P1, the AS-1 sends:
0xB0, 0x20, 0x00 (bank number LSB)
0xC0, 0x00 (program change)
And when changing to F1 P99, the AS-1 sends:
0xB0, 0x20, 0x05 (bank number LSB)
0xC0, 0x62 (program change)
As you can see, the AS-1 leaves out the MSB entirely.
The AS-1 will still happily change banks when you include any MSB value. It just seems to simply ignore this completely.
Roland SE-02
I haven’t found a way to make the SE-02 send program changes, but I might be overlooking something obvious.
The SE-02 will respond to bank select, but it uses the value of the MSB to change banks and completely ignores the value of the LSB!
You can for example change to bank C, patch 3 by sending:
0xB0, 0x00, 0x02 (bank number MSB)
0xC0, 0x02 (program change)
The SE-02 will still happily change banks when you include any LSB value. It just seems to simply ignore this completely.
Summary
D-05: Requires LSB. MSB is optional, but must have the value 0x57 when included.
AS-1: Requires LSB. MSB is ignored when included.
SE-02: Requires MSB. LSB is ignored when included.
Given these results, I am now convinced that @PeterHanes suggestion to have two separate bank knobs, one for the MSB and one for the LSB, that can both be enabled and disabled independently is indeed the only way in which bank select can be made to work for everyone.