Опять же, портирование. Если вдруг этот кусок кода захочется перенести на другой контроллер, где очистка флага требует другой последовательности действий, или регистр называется по другому, достаточно будет заменить только одну-две строки в начале и не лезть в логику.
Пример реальный. У меня есть проект, в котором в прерывании UART'а прямо на лету идет парсинг ответов на AT-команды. И вот там я как раз читаю в промежуточную переменную, и дальше по-всякому ее сравниваю, пишу в массивы и т.п. За счет промежуточной переменной логика оказывается полностью отделена от чтения из аппаратных регистров. Да, лучше было бы вообще вынести всю логику парсинга в отдельную функцию, и, может быть, я со временем так и сделаю, но пока просто отдельная переменная.