Well, I've been investigating sound quality issues some more and found that the interpolation wasn't really doing what was intended (an initial spectral analysis didn't show any significant rise in SNR). The sampler was interpolating over the previous and current sample but using a fractional address that corresponds to the current and next sample instead. After fixing the interpolation to use the current and next sample, I ended up with an SNR gain of 10 dB - much more along the lines of what I would have expected from it. This translates to a much improved playback quality.
Along the way, I fixed many issues. I tweaked the key-rate scaling calculation a bit to fix some problems in sakutai_07.ssf where some samples were getting cut off too early. Also, I noticed some non-looping samples actually had LEA (loop end address) set to 0, causing the samples not to be played at all (sakutai_02.ssf being an example). To handle this, I just check that the current address is greater than both LSA (loop start address) and LEA before stopping the slot. I also fixed the backwards loop mode so that it initially samples forwards before first hitting LSA (Soukyugurentai and Panzer Dragoon Saga use this loop mode).
Changes: -Rewrote much of the interpolation code -Improved key-rate scaling calculation -Fixed playback of non-looping samples with a zero loop-end address -Fixed backwards looping mode so that it initially reads forward until encountering the loop-start address