I see we all follow the same source when it comes to calculating AICA volume levels Pity, as I belive it's a bit off (too loud). Then again it could be a bug somewhere else.
Anyway, there's a value missing in your SDLT table. It's -1000000.0, -39.0, -36.0, (...) and should be -1000000.0, -42.0, -39.0, -36.0, (...) In those 4-bits volumes it's always 3dB spacing. The first one could very well be -45, but that's pretty much zero anyway.
I've tried this saving/restoring ADPCM state and IMO it's wrong. To be sure I need to test it on looped type 2 where return position is not zero - but for now I'll stay with my code.