I always reuse the same template for the same reason you mentioned about maintainability and is a best practice(like anything there can be few exceptions). I create parameters for things that vary between the build definitions so that sharing the template is easy.
I worked in a project in the past where we created copy for each build definition and it was painful when we had to change something.