From the "SIMPLE COMMAND EXPANSION" portion of the bash manpage:
SIMPLE COMMAND EXPANSION
When a simple command is executed, the shell performs the following expansions, assignments, and redirections, from left to
right.
The words that the parser has marked as variable assignments (those preceding the command name) and redirections are
saved for later processing.
The words that are not variable assignments or redirections are expanded. If any words remain after expansion, the
first word is taken to
be the name of the command and the remaining words are the arguments.
Redirections are performed as described above under REDIRECTION.
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.
So, it might sound insane, but the "word expansion" (interpolation) of echo $LOG
happens in step 2, and the variables actually get properly expanded in step 4... I'm not sure why you're not simply getting a blank line, but wonder if it was from prior test runs?
Both of these work around that, either by separating into multiple "simple commands", or by interpolating $LOG in a sub-shell:
ROOT=/tmp LOG=$ROOT/blah.log ; echo $LOG
ROOT=/tmp LOG=$ROOT/blah.log sh -c 'echo $LOG'