Scenario: FreeBSD 12.0 release, just installed
Essentially, Mutt/Neomutt throws simple error messages, such as 'Could not copy message', when trying to decrypt a message in a mailbox, with only GPG2 installed.
As soon as 'gnupg1' package is installed, it is able to decrypt messages.
Unfortunately pkg required gpg2 as a dependency, which can create a confusing situation.
It took quite a while to solve this bug.
Firstly because the line "source /usr/share/doc/mutt/examples/gpg.rc" must be in muttrc, unlike Linux, for decryption to work.
Secondly because only Neomutt is compiled with debug options, whereas Mutt is compiled without debug options (but it does make sense, to keep one simple and one complex, as long as both are available). But once you have debug options enabled you can add verbose flags to modified GPG calls in your muttrc, and then get more fine grained understanding of the issue.
Is there any reason you're not using gpgme with crypt_use_gpgme in your rc. It's pretty much a single line config that replaces everything from gpg.rc.
I'd still highly recommend using crypt_use_gpgme instead however.
Since gnupg 2.1 '--pinentry-mode loopback' is required when using --passphrase-fd. Can you add this and see if it fixes your issue?
Either upstream needs so add this to contrib/gpg.rc to commands that use --passphrase-fd, or we need to patch it in at build time.
There are still some supported distros that install gnugp 2.0 so having upstream fix this might not be best until gnupg 2.1 is default.
Unfortunately I tried your suggestions but neither work, both continue to throw the "could not decrypt PGP message" and "could not copy message" error.
After reverting to the working config as mentioned in my original post, it only throws the above error messages when the GPG password input is wrong.