One thing I just realized is that in the screenshot, the I value (BTC per hour) is set to a question mark. So maybe it did quickly submit a block candidate and was waiting to see if it got accepted by the network? Can you post a log screenshot of what it looks like when bfgminer finds a valid block (whether it is accepted by the network or not - you mention 2 stale blocks)?
What exactly do you mean by log? I checked my Bitcoin Core log and found out older log was wiped. After quick search, Bitcoin Core has config called
shrinkdebugfile which enabled by default with 10MB limit. And few days ago i perform reindex which wipe everything from last years.
With log, I mean the output shown here.

I am wondering whether it logs / shows whether it found a block at diff 1 here.
Trying to work out whether the software even realizes that 20 minutes have passed, reduces the difficulty to 1, hashes a block candidate and tries to submit it or whether this all doesn't even happen.
Even just seeing how a successfully mined block is shown in this log, would help, since I can only reference my experience with cgminer whose output looks very different.