If I were going to summarize my mental model overall, I would say that terms like GPL pasted into license notices for published source code memorialize the terms of contracts that grant licenses. In the jargon, the deals between developers, users, and distributors are "license agreements".
The argument against revocation at will is either reliance or consideration---contract doctrines. If there's ambiguity or vagueness in the terms, it will be argued under rules of construction---again contract doctrines---not statutory interpretation or some copyright-specific scheme. Claims for exceeding the license or breaking rules in the terms will be infringement when preempted and breach otherwise, with a lot of work still to be done sharpening lines like the "extra element test" and "substantial use restrictions". The defense to plead against an infringement claim is license---a property concept.
The fundamental error of "license, not contract" is really the underlying idea that they're mutually exclusive. They're really integral and complementary. Between private parties, contracts are the means by which licenses are given and received.
When writing specifically about the GPLs, the claims are usually about the source code requirement. I can slip into just saying "contract" because that's where I see those claims heading.