Ótima descoberta, @thoka!
O problema está aqui
users retorna {"username_lower" => objeto User }
No entanto, se name não estiver em minúsculas, users[name] não existe.
Correção:
if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...
Ou melhor: converta todos os nomes para minúsculas no início do método, pois há muitos problemas ali. groups faz corretamente .where("lower(name) IN (?)", @names.map(&:downcase)), mas funções como visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids e members_visible_group_ids todas usam where(name: @names), o que também introduz problemas de sensibilidade a maiúsculas e minúsculas.