Would you describe how the LoRaWAN back-off timers work?

The back-off not only has a randomly calculated range, but it also has a limit to the total time spent retrying during each time slot.

During the first hour, 36 seconds worth of join requests are allowed. This means that if the mDot/xDot reattempts to join several times and uses up the 36 seconds in the first 25 minutes, it will have to wait 35 minutes until the rest of that hour expires before attempting again.

During the next 10 hours, 36 seconds worth of join requests are allowed. Again, if the 36 seconds of attempts are used, it will have to wait until the rest of the 10 hours pass until it can try again.

During each of the next 24 hour periods only 8.7 seconds of join requests are allowed.

The timer for the above restrictions is reset upon a successful join. So any successful join should start it from the beginning again.

A reset of the mDot/xDot will also clear the TXN timer. So if the TXN value is too high for your application, you could reset the mDot/xDot to clear the back-off and try again.

The back-off is triggered when the mDot/xDot is unable to communicate to the gateway over a long period of time. It is meant to prevent having a large network of DOTS overloading the gateway by all joining at the same time when the gateway becomes available again. Resetting the mDot/xDot would bypass this mechanism, but if you don't have a large network of mDots/xDots, it may not be a problem.