¿Podrías usar la tarea de administración masiva en este caso?
Aunque acabo de probar tu segundo código y funcionó para mí en mi usuario de prueba (correo electrónico: test_thirteen@here.invalid, era TL1 y ahora es TL0).
User.where(trust_level: 1).each do |u|
if u.primary_email&.email.end_with?(".invalid")
u.change_trust_level!(TrustLevel[0])
end
end