It looks to me as if the \ is acting as an "escape" character, preventing the following & being interpreted as the "define" character. What happens if you do a "set escape off" first?

You can use the escape character before the substitution character (set through SET DEFINE) to indicate that SQL*Plus should treat the substitution character as an ordinary character rather than as a request for variable substitution.
I don't fully follow Gregg's example - but it avoids the problem because the & does not follow the \.