Hoy lo volví a revisar y descubrí que:
[25] pry(main)> how.totp_enabled?
=> false
[26] pry(main)> how.backup_codes_enabled?
=> true
[27] pry(main)> how.totp_or_backup_codes_enabled?
=> true
Así que intenté eliminar también los códigos de respaldo, siguiendo la respuesta anterior de @falco:
UserSecondFactor.backup_codes.where(user_id: id).each(&:destroy!)
Ahora, aquí está la solución completa para deshabilitar OTP en un usuario que perdió su forma de acceder: debes eliminar tanto las entradas de totps como los backup_codes, de modo que la llamada a #totp_or_backup_codes_enabled? devuelva false.