I tried your suggestion of adding "--keep-display" to gpg-agent's invocation. It's a partial fix. I say "partial" because pinentry (as distributed in OpenSUSE 42.1) takes "option 3" (see logger statements in comment 2), and delegates to /usr/bin/pinentry-gtk-2. I prefer pinentry-qt4 in this case, simply because pinentry-gtk-2 writes a lot of warnings to stderr and pinentry-qt4 doesn't. But that's probably another issue.