Sorry, to a point we've been using the term code freeze somewhat interchangeably.
With a 2 month cycle prior to release, we're actually doing a feature freeze when we branch. IE, we still want to fix broken things, but we don't want to make any changes to existing feature functionality or add new features. Especially key in an LTS, I think.
It adds some complexity to managing the code base, but the difference is that while an LTS continues to be supported with security and (hopefully very) minor bug fixes throughout the LTS support period, master takes all new things, be they fixes or features or changes. for the other 3 quarterly releases in a span, this essentially means that something that is not an LTS can simply be tagged from master.
Hopefully this makes sense, because with an LTS we're effectively maintaining the code at what we consider a supportable, stable point and we will want to make sure that we can easily apply fixes to it. If we continuously operate in master, trying to support the LTS is a harrying notion.
So to summarize my rambling: LTS releases get their own branches, normal quarterlies are tagged from master. Feature freeze happens at branching for the LTS, code freeze happens sometime slightly before the release (where we only accept emergency fixes, such as security issues), once the release is tagged and pushed to pypi, the LTS branch is code thawed and can accept new fixes as necessary. I can diagram this in the morning, if needs be.
It keeps the LTS stable and keeps us from worrying about the master branch.
-S