Hi @corb,
If you know some Javascript or are interested in learning, the Scripting extension can display a prompt, such as to choose a project to copy, when users click a button field in a project record. You could code it in a way that either warns the user after clicking this button and selecting a project that the next step will replace existing tasks or in a way that simply appends copied tasks to the project. Scripting is very customizable.
Some other approaches to task templates include record templates or building your base in a way that supports a standalone templates table such as using a junction table approach.
A junction table setup would look like: Projects (unique list) <-many-to-one-> Project tasks (junction table) <-one-to-many-> Templates (unique list)
This approach would let you build task templates in your Templates table to be reused independently for different projects.
Hope that helps!
-Stephen