When is {a,b,c} expanded in bash, when is it not?

The Bash manual says that:

SIMPLE COMMAND EXPANSION
When a simple command is executed, the shell performs the following
expansions, assignments, and redirections, from left to right.
[...]
4. The  text  after the = in each variable assignment undergoes tilde
   expansion, parameter expansion, command substitution, arithmetic
   expansion, and quote removal before being assigned to the variable.

Brace expansion is not in the list, so it isn't performed for the assignment v={a,b}-{1,2}. As mentioned by @Wildcard, the simple expansion to v=a-1 v=b-1 ... would be senseless anyway.

Also, when executing the echo $v, the following applies:

EXPANSION
Expansion is performed on the command line after it has been split
into words. [...]

The order of expansions is: brace expansion; tilde expansion, 
parameter and variable expansion, arithmetic expansion, and command
substitution (done in a left-to-right fashion); word splitting; and
pathname expansion.

Brace expansion happens before variable expansion, so the braces assigned to $v aren't expanded.

But you can do stuff like this:

$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar

Expanding it with $(echo ...) should work if you don't have any whitespace in the string to be expanded, and hence won't run into problems with word splitting. A better way might be to use an array variable if you can.

e.g. save the expansion into an array and run some command with the expanded values:

$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"

An interesting point. Possibly helpful is the following excerpt from man bash:

A variable may be assigned to by a statement of the form

      name=[value]

If value is not given, the variable is assigned the null string.  All values undergo tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal (see EXPANSION below).

Note that brace expansion is NOT mentioned in the list.

However this still leaves a question, namely: How does the shell know that this is a variable assignment and thus not subject to brace expansion? Or more precisely, where is the parsing sequence clarified and codified such that the shell is defined to identify variable assignments before it handles brace expansion? (This is obviously how bash works, but I haven't found the exact line of documentation describing this.)