This will be a long answer and I need to ask another question first. First the
questions
1) Are you using the site template in the same site collection where it was
built or have you moved it or loaded it to the farm level using STSADM?
2) Are the WFs you are using built from the OOB WFs, custom visual studio or
SPD?
Here's why those questions matter.
1) Content Types built in the browser are created with a unique GUID in the
Content Type gallery. If you build an identical content type in another site
collection it will have a different GUID and therefore won't be recognized as
identical.
2) Saving a site as a template only saves the things that are built inside that
site, not Content Types built at the top level site of the site collection. If
you try to use them in a different site collection you won't get all the same
content types.
3) SPD workflows are saved as part of a Site Template, but since they rely
heavily on GUIDs they may or may not function in a site built from the Template.
Thorough testing is required.
4) Changes made to content types deployed as Features can't be updated by
updating the Feature. A custom application needs to be written to update them
using the object model. Content Types built in the UI are more forgiving, but
still not perfect, especially when it comes to views and document templates.
You should treat content types like a record schema in a database. Changes
should be avoided whenever possible.
In answer to the question "what is the correct way to make changes to custom
list columns, custom edit forms, and WFs". The only real answer is Plan right
up front and don't make changes. Changes to these elements don't propagate.
Custom programming is usually the only solution.