A couple things to note that may aid you, then i'll get directly to your question.
Firstly, Page template's have a Page Layout (the html and where webpart zones are), you can create shared page layouts and assign templates to them, so this may resolve in an easier fashion the "I want multiple templates but when the html changes i want to do it in one place."
Likewise, if a webpart zone is named the same (say "leftZone, mainZone, rightZone" if you switch a page's template to another template that has the same named webpart zones ("leftZone, mainZone, rightZone") all your webparts will migrate into the new location.
Back to answering the actual question, you can use macros to hide/show webparts (the visibility option on them). There is a macro for CurrentDocument.DocumentPageTemplateID, you will probably want to create a custom macro method to pass it the codename of the template and get the ID to make your life easier (and to account for different page template IDs in staging/live environments).
So something like
Visible: {% CurrentDocument.DocumentPageTemplateID == Util.GetTemplateID("MyTemplate") |(identity)GlobalAdministrator%}