Chaining Tasks with async/await
Since await is effectively a continuation anyway, you could simplify your function to:

private async Task PrepareData()
{
    Task[] FirstTasks = new Task[] { TaskOne(), TaskTwo() };    // Do First group of Tasks
    await Task.WhenAll(FirstTasks); // Wait for First group of Tasks

    Task[] SecondTasks = new Task[] { TaskThree(), TaskFour() }; // Do Second group of Tasks
    await Task.WhenAll(SecondTasks); // Wait for Second group of Tasks 

    GuiTaskOne();
    GuiTaskTwo();
}


I also suspect you meant to await the GUI tasks too.