На этом этапе контекст все еще может работать под учетной записью aspnet или учетной записью, с которой вы запускаете пул приложений.Возможно, вы захотите выполнить тест, в котором вы создадите пару (или все) событий, доступных в Global.asax, и распечатаете результат Context.User.Name в текстовый файл.Тогда, возможно, вы увидите, существует ли какое-либо значение для имени.Я видел, что имя будет пустым, если сайт работает как учетная запись aspnet.
Вы также можете проверить подключения к вашей базе данных и посмотреть, кто пытается войти в базу данных в то время, когда Context.User.IsInRole ("Moderator") возвращает false.
Также (и это выстрел в темноте) вы можете посмотреть, что вам дает Thread.CurrentPrincipal.IsInRole («Модератор»).Я надеюсь, что эти предложения помогут с отладкой.