Hmm... so basically you keep two ADPCM states per channel, one for main sample and one for interpolation? Interesting. There's a limit on pitch changes (vs sound's own) when it comes to ADPCM, but what happens if you're standing on LEA-1 and steps_to_go is greater than 1, say 2 for example? Won't it read LEA-1 (correct) and then LEA sample/garbage (that's past loop end now) and contaminate decoder state? This is a very rare case, but still...
I don't know what happens when you change sample type on active channel - I could try to test that. I'm kinda busy now, away from home/town much, so it will have to wait a bit on the TO-DO list. My code will happily switch but ADPCM state will be undefined as it's preset on KEY ON. What AEG phase/level was that channel when the switch happened?
If there are any channels playing ADPCM wrong, try to catch what sample type it is (2/3) and what are LSA and LEA. I can't find good test cases where LSA > 0.