sorry, not quite sure I follow you
ok, Im off out so dont have time to check your patch yet....so these are some random thoughts (for now), so may be crap
as for interp, the code is
int32_t y2 = attr_table.array[(index+1)&attr_table.LENGTHMASK]<<attr_table.GAIN;
by and'ing with length mask, this essentially will modulo it.
but I think possibly, as you mentioned, the incoming index is limited to 100%(64) , this kind of makes sense in when seeing this as a table (i.e. generically, rather than a wave cycle) , viewing the tables as a 'circular buffer' as you want for a wave is a 'special case'
all that said, I'm not sure this is your issue... as even if it didnt interp correctly, why would the value shoot down like this.. if the interp was wrong, Id just expect a 'step'
as you say, I possibly didn't notice this as I used higher res waves w/ more samples.
just one thing, and I could be wrong, your scope does remind me of issues I had when developing the wavetable object, but that was caused by something rather different, e.g. switching waves when not at the start of the wave... (you cannot move to a different wave, except at phase = 0 without glitching)