The short answer is yes, you can do this. There's a script step called duplicate record that will generate a copy of the current record, but with a new set of auto-entered data such as a serial number.
The long answer, "how do you do this?", depends on the structure of your database. Most invoices display data from at least two tables, (Invoice and Line Items)--sometimes more. How are yours set up? Duplicate record will copy the current invoice record, but you have to do additional scripting to duplicate a set of related line item records if you also want them to be duplicated.
I have invoice and line items (portal) and I want everything on a template...
I also heard a rumour that version 11 had this feature to speed up work with invoicing.
I'm still waiting for my download link to get a copy of 11 so I don't know if such is the case.
In 10 and older versions, You can "mark" an invoice record as a template. (Define a field and store a value in this field only for those invoices you want to serve as a template). You can use the value in this field to find your templates when you want to use one to generate a new invoice.
In your script, you'd either use Go To Related records or a find request to pull up the matching line items on the line items layout and then loop through the records duplicating each, but then assigning the invoice number of the new copy to each duplicate so that it appears in the new invoice's portal instead of the old. If you decide to use Go To Related Records, make sure you check for the existance of a set of related line item records just before you execute the GTRR step or you can end up with a disastrous result where your script may duplicate invoice records instead of line item records.
Go To Related Records is a very useful tool, but which is very poorly documented. To learn more about GTRR, click the following link:
The Complete Go To Related Record