In Common Lisp, "variables" can be "constant variables" (defined with DEFCONSTANT), "special variables" (variables for which a SPECIAL declaration applies, often established with DEFVAR or DEFPARAMETER), or "lexical variables" (variables bound by LET/LAMBDA in the surrounding context for which no SPECIAL declaration is in effect.
SYM2 in your code above fits into none of these categories. In CCL, it'll sort of be treated as a SPECIAL variable for the purposes of reference and assignment, but bindings of the variable will be (new) lexical bindings. Other implementations behave at least slightly differently, and most compilers will warn when such variables are encountered. (In CCL, the compiler refers to such variables as "Undeclared free varables": they're not lexically bound and not declared to be SPECIAL or CONSTANT variables.)
Most interpreters don't warn about use of these variables, and people are often casual about introducing such (formally undefined but practically harmless, usually) variables in forms that they type into the REPL; some books and tutorials are equally casual about this.
In CCL, some forms typed into the REPL are evaluated by a very simple interpreter; other forms are evaluated by compiling them and calling the resulting anonymous function. The simple interpreter doesn't warn about the use of SYM2 in
? (setf sym2 'sym1)
though the use of SYM2 there isn't (strictly speaking) well-defined. The compiler does warn about the use of SYM2 in the DO form, and the text of that warning precedes the other output.
There's no other difference in behavior between the two cases (besides the fact that the code in the second DO generated a compiler warning.) I can't quite understand your diagnosis of what you see, but I'm as confident as I can be in saying that you haven't discovered a bug in DO.