Eu mesmo encontrei a solução para o meu problema, mas ainda não entendo muito bem por que não funcionou:
Eu concedi privilégios a esse usuário nos hosts % e localhost:
# Before
+-----------------+------------+
| Host | User |
+-----------------+------------+
| % | username |
| localhost | username |
+-----------------+------------+
Com essas configurações obtive os resultados que mostrei acima. Quando concedi privilégios a esse usuário no host, de repente funcionou.
# After
+-----------------+------------+
| Host | User |
+-----------------+------------+
| % | username |
| localhost | username |
| <myIpAddress> | username |
+-----------------+------------+
Aparentemente % funciona para conexões remotas, mas não para conexões locais.