Это известное поведение в собственном пользовательском интерфейсе MSI.
Лучшая работа, которую я могу найти, - это сделать клон диалога и перейти от оригинала к диалогу клонирования (или клону к оригиналу), чтобы он выглядел как тот же диалог для пользователя, но фактически будет другой диалог, и данные будут обновлены.
Пример.
На SQLDlg1:
<Control Id="Test" Type="PushButton" Text="&Test" TabSkip="no" Default="yes" Height="17" Width="56" X="283" Y="195">
<Publish Event="NewDialog" Value="SQLDlg2">1</Publish>
<Publish Event="DoAction" Value="ValidateDatabase">1</Publish>
</Control>
На SQLDlg2:
<Control Id="Test" Type="PushButton" Text="&Test" TabSkip="no" Default="yes" Height="17" Width="56" X="283" Y="195">
<Publish Event="NewDialog" Value="SQLDlg1">1</Publish>
<Publish Event="DoAction" Value="ValidateDatabase">1</Publish>
</Control>
На в следующем диалоговом окне я также очищаю свойство на случай, если они вернутся.
<Publish Dialog="VerifyReadyDlg" Control="Back" Property="DatabaseValid" Value="{}">1</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="SQLDlg">1</Publish>