Приложениям, которые сами обновляются, трудно под UAC. Лучше всего разделить код, который выполняет обновление, на отдельный исполняемый файл. Поместите манифест с requireAdministrator на этот exe. В основном приложении оставьте код, который проверяет наличие обновлений, и разрешите ему активировать кнопку или элемент меню, когда требуется обновление. Поместите щит на эту кнопку или пункт меню, и пусть он запускает отдельный exe с ShellExecute. Пользователь получит диалоговое окно согласия UAC, которое он будет ожидать из-за щита. Отдельный exe-файл, поскольку он имеет повышенные права, сможет записывать файлы программ и другие защищенные области.