Yo mismo encontré la solución a mi problema, pero todavía no entiendo muy bien por qué no funcionó:
Otorgué privilegios a ese usuario en los hosts % y localhost:
# Before
+-----------------+------------+
| Host | User |
+-----------------+------------+
| % | username |
| localhost | username |
+-----------------+------------+
Con esta configuración obtuve los resultados que mostré arriba. Cuando concedí privilegios a ese usuario en el host, de repente funcionó.
# After
+-----------------+------------+
| Host | User |
+-----------------+------------+
| % | username |
| localhost | username |
| <myIpAddress> | username |
+-----------------+------------+
Aparentemente, % funciona para conexiones remotas, pero no para conexiones locales.