App.Current.Shutdown()は非同期で動作します。これは、このメソッドを呼び出すと、Shutdown() の呼び出しに続くコード行の実行から保護されないことを意味します。
問題は、App.Current.Shutdown() が呼び出されたスレッドをブロックする方法です。
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        App.Current.Shutdown();
        File.WriteAllText(@"..\log.txt", "Info");    
    }
}
 private void App_OnExit(object sender, ExitEventArgs e) {
        Thread.Sleep(3500);
    }
File.WriteAll は新しいファイルを作成し、「Info」文字列を書き込みます。