Hi Seamus and welcome!
I like Adam's idea. I wouldn't do the hide/show on the control, though. Rather, I'd create a separate view for each version and add an Open rule to switch the the correct view based on the version in the form. You will need to save the version in the form's XML so that subsequent saves don't auto upgrade the view (unless they click the button to do it). The big drawback of this approach is that it only works for view changes (but that's probably all you need based on your post). If you need to upgrade the schema, this could work, but InfoPath always wants to update the schema to the latest version and you couldn't prevent that. If you are only adding nodes, however, that's not a big deal. If you need to change or delete nodes, then it wouldn't work. With many versions you could end up with a complex XSN, but I definitely recommend this approach overall since it is quite simple.
Another technique would to store each XSN as a separate version. If you are using just a Web server and have published the XSNs to a folder, you could do this but it would require that V1 knows of the existence of V2 (so that the "Upgrade" button knows which URL to add to the XML). Assuming the schema was upgradable (only additions are automatically supported) you just add some code opens using the new instance. There is a NewFromSolutionWithData method that you can use:
var objXMLNode = XDocument.DOM.selectSingleNode("/employees/employee");
var objXDoc = Application.XDocuments.NewFromSolutionWithData(objXMLNode, "C:\\Employee.xsn");
Note: you'll need to change the location (C:\\Employee.xsn) to be the new XSN on your share. Add a rule to close the existing after you call the code above. You'll probably want to mark it obsolete somehow or have the new form overwrite it - for that, you'll need to also pass the filename in the XML and set it in the new form (use OnLoad event).
For forms where the schema nodes either changed or were deleted, you can add some upgrade logic before the code above to to change the XML before opening with the new form.
If your form's schema didn't change, the upgrade should be quite simple - just call NewFromSolutionWithData and close the old form.
If you are using SharePoint and one form library for all of your forms, you can't easily do the above because form library supports only one form template. You could create multiple form libraries, but that would become a UI mess and code mess. If you absolutely need to continue with your existing SharePoint form library, I recommend storing the forms in SQL and replacing your default view with a data view that shows the forms stored in SQL. You can use a Web Service to manage submitting and retrieving from the SQL DB. This would allow support for multiple XSNs and it would be more performant than SharePoint for large form libraries. It would also allow you to do fine grained permissions and richer reporting. We provide a Web Service to assist so you don't have to write it from scratch. This would allow you to use the same technique as described above on an existing SharePoint site.
Hope this helps!
Patrick Halstead / Microsoft InfoPath MVPQdabra® Software / Streamline data gathering to turn process into knowledge