OK, here's an interesting clue:
I just logged in later than usual this morning, after other users are probably logged in. I tried to download the Error Log report, which is currently too large to display (this has nothing to do with this problem, it's correctly logging debugging messages from a custom add-on) so it has a download link.
When I click the download button, it takes me to this URL:
/connectors/system/errorlog.php?action=download&HTTP_MODAUTH=0
The content of the URL is a JSON array like this:
{"success":false,"message":"Access denied.","total":0,"data":[],"object":{"code":401}}
in other words, it's giving me an access denied error in raw form.
Notice the HTTP_MODAUTH=0 in the URL.
If I view the source of the report log manager page, there is a script with this line:
MODx.load({xtype: "modx-layout",accordionPanels: MODx.accordionPanels || [],auth: "0"});
I don't know a lot about the way the scripts for these manager pages are generated, but I'm guessing the line above is the problem? It should be hard-coding my actual auth token into the page, right?
So, I tried flushing my permissions, logging out and back in, and sure enough now there's a real auth token on that line instead of 0, and I can download the log.
For those familiar with the manager, I'm probably just stating the very obvious. I don't have time to investigate further right now. When I have time I'll look more deeply into it.