My first question is about the mechanism for filling in all the field data. I’m not really sure how that would happen. It might be more straightforward to use the afterSaveItem hook to create the new duplicate item, then redirect to the new item’s edit page. That basically would reverse the order you describe, creating the duplicate first, then editing, but might be easier in the long run.
The other question, which might or might not apply to your site, is how to handle plugin data associated with an item. For example, if the Geolocation module has added map data for an item, then you’d also need for the plugin to know to grab the map data and duplicate it for the new item. It would depend on what plugins are in play in your site.