What am I doing wrong here?
The syntax is valid SQL. I'm formatting a bit differently and adding parentheses to show how it is / should be parsed:

SELECT UserRole.Name 
FROM 
    Opportunity
  LEFT JOIN 
    (   Account 
      JOIN 
        (   User 
          JOIN 
            UserRole 
          ON 
            User.UserRoleId = UserRole.Id
        ) 
      ON 
        Account.UserId = User.Id 
    )
  ON 
    Opportunity.AccountId = Account.Id


It seems that the version of MySQL you use does not parse this correctly when the internal joins are INNER ones. If they were all LEFT joins, it wouldn't have a problem.

There are 2 solutions:

A) Use the above, with the parentheses.

B) Rewrite, changing the order of the joins, so the they not nested. You'll have to replace the LEFT to a RIGHT join but you don't need parentheses:

SELECT UserRole.Name 
FROM 
            User 
          JOIN 
            UserRole 
          ON 
            User.UserRoleId = UserRole.Id
      JOIN              
        Account 
      ON 
        Account.UserId = User.Id 
  RIGHT JOIN 
    Opportunity
  ON 
    Opportunity.AccountId = Account.Id