I think the basic shape of this idea is good - it's a neat way to keep the ubiquitous 'python' command available as Python 2 starts to go away, without breaking compatibility with all the scripts that expect that command to mean Python 2. You're essentially saying that 'python' can be Python 3, but only for scripts that deliberately opt into that behaviour. The opt-in mechanism is something that will be ignored if 'python' points to a regular Python interpreter and not the new loader.
One possible change I'd propose: rather than allowing a general specification of Python versions, perhaps it should be just a single 'python 3 is OK' flag. That keeps things simple, and makes it seem more like a transitional measure than a permanent feature. I don't see any specific problems with the version specifications, it just feels a bit like overdesign.
Using the environment variable is a neat way to provide ignored-by-default information, but don't forget it's also inherited-by-default. So if my script sets PYVERSIONS to allow 'python -c' to use Python 3, that will also affect anything it runs that doesn't explicitly set PYVERSIONS again, which could conceivably cause issues. I don't have a better proposal for that, though.
I assume the -m flag would use the same mechanism as -c.