in reply to What gets loaded

What happens in Case 2?
You must know use CGI qw(:cgi); is equivalent to
BEGIN { require CGI; CGI->import(qw(:cgi)); }

use CGI; is equivalent to

BEGIN { require CGI; CGI->import(); }

So the import method is passed no parameters. It depends on the type of exporter used, if any, what happens then. For example, the standard module Exporter will export the tags/symbols in @EXPORT. Filling @EXPORT is a bad practice for module authors for this reason. CGI loads a lot of unwanted stuff by default, see chapter USING THE FUNCTION-ORIENTED INTERFACE. Hm, turns out CGI doesn't do much by default, I must've been misremembering.

It is a good practice for module consumer to always specify the minimum amount of symbols to import. It saves compile time and memory, and since import can do anything, not only export symbols, it avoid unnecessary side-effects. Most of the time, you simply want an empty list. use CGI qw(); is equivalent to

BEGIN { require CGI; }
Are only the subs loaded that the handle $q references?
No; and you are conflating methods with subroutines.
Is there any documentation that addresses this area?
Follow perldoc -f import
I think this has to do with Autloader and SelfLoader
No.