I don't like any of the open source templating plugins. I think they're rather inflexible and inelegant. I like the Cloudbees templating plugin but it's not necessarily cheap and you need to be familiar (or become familiar) with jelly.
We're in the same boat -- 99% of jobs share 99% of the same configuration. We create different code branches for different release dates, and sometimes we do parallel development, meaning we handle a lot of eerily-similar jobs. Additionally, we have many, many developers and we do not want them to directly touch the Jenkins job configuration UI. Reason being is partly because a global support team is responsible when a developer unknowingly hoses his/her job but still needs to cut a release by midnight.
I solved this by externalizing the templating system. At first we wrote a Rails app which simply accepts some input fields (job name, SCM URL, etc), clones and populates a template config.xml, and POSTs that over to Jenkins.
But now we have too many Jenkins master instances and many active branches of very similar code, so manually creating jobs via a web UI is too inefficient. So I wrote a standalone application which contains a series of template job config.xml types and a means to parse Maven POMs as input to those templates. For instance, the job name is automatically determined via the Maven GAV.
I've also baked-in support for arbitrary plugins; basically, anything that can contribute extra XML passages to a main template can be added to the tool in about five minutes. Everything supports variable interpolation, too. So a tech lead sets up Project X, June release with the following POM property:
<downstreamJobs>project-y-$version,project-z-$version</downstreamJobs>
When the job is created, $version resolves to "june-release" and then the downstreamJobs section is translated into a valid XML snippet and spliced into the template config.xml. The great thing is, in August, a fresh-out-of-college dev can create a brand new Project X, October release without any knowledge of the internals.
The final great thing is that this standalone application maps a SVN URL to an appropriate Jenkins master instance (in our case, the mappings are by business unit, which is fairly logical and standard). The app lives in an app server with a queue in front of it, and our SVN installation contains a post-commit hook which adds a SVN URL to that queue when the commit contains a special message ("+makeJob", inspired by Crucible smart commits).
Now novice developers with very little knowledge about the CI system can create new jobs without ever entering in any technical details, and they'll receive an email containing a link to the new job as soon as it's created. Our goal is to allow developers to go from local commits -> artifact repository without ever worrying about the build system in between. It was a lot cheaper for us to engineer a good job templating system once (or twice, really) than to eternally field support requests.
This might be overkill for you; but then again, if you're tasked with managing thousands of jobs across a developer base with varying degrees of Jenkins competency, it might just be up your alley. If anything, realize that externalizing your templating system is a valid option.
PS -- I'd love to open source our templating system if anyone finds it interesting. My day job is not keen on releasing software so I would need some strong words of encouragement.