Hi Darren,
One option is to use Sync Recipes (you can use one to copy the input and other at the end (a copy of the output), you can also use Sync for step 2 (you can set Sync as replace or append). If you rerun you can decide what you want to build (an option is to Force Build, with which all the flow would be executed).
Another option is to use scenarios. With them you can set your three steps:
1. A Python code step that duplicates the output dataset (you can also copy do it manually doing a copy of a dataset with the user interface).
2. A Build/Train step that builds the flow (here you can also use Python code if you want to do some complex checks, but you can use a normal python code recipe in the flow).
3. Use the Export option to "copy and paste" the backup dataset (generated with Step 1) to another dataset (here you can do it with python again, to do it automatically).
If you need more information about something let me know 🙂