I was comparing your implementation to https://github.com/edubkendo/supermemo/blob/master/lib/supermemo.ex, and I see that your ITERATION_RESET_BOUNDARY is 3/5 = 0.6 while the other implementation uses 0.4.
I don't know the SM2 algo well enough to say which is right, or whether it's just a weighting that can be adjusted. Can you confirm?