That's most definitely a bug in Phoenix. The following compiles:
int y = 0;
int x = (phoenix::let(_a = 1, _b = 2)[phoenix::let(_b = _1)[ _a ]])(y);
The following does not:
int y = 0;
int x = (phoenix::let(_a = 1, _b = 2)[phoenix::let(_b = 3)[ _a ]])(y);
Bizarre. Could you file a bug at https://svn.boost.org/trac/boost/ (click "New Ticket"). Thanks. (Note: I'm not the maintainer.)