gpg-agent's pinentry-program configuration option currently expects a full path.
In my experience of helping people debug GnuPG, it is very common to see people place an unadorned program name in that configuration option, and then get confused about why nothing is working.
for example:
pinentry-program pinentry-qt
simply doesn't work, even when pinentry-qt is installed and is on the $PATH.
And when it doesn't work, the error message is particularly opaque because most people don't know how to chase down the problem. gpg-agent's own error message is:
ERR 67108949 No pinentry <GPG Agent>
Which is implausible for users who say "but of course it exists, i can run pinentry-qt directly from the command line".
Apparently pinentry is launched by assuan_pipe_connect, with the argument showing up in the NAME variable to that function.
So either this should be fixed by assuan being willing to search $PATH if NAME is not absolute, or gpg-agent at least should search path and send an updated NAME.