Eu tinha esquecido que o Fedora tem o SELinux habilitado por padrão. Desligar o SELinux removeu o erro.
Como apontado pela dawud, desligar o SELinux não deve ser considerado uma solução - ao contrário, o SELinux deve ser configurado para permitir que o Apache use os arquivos.
A solução rápida era executar restorecon
no diretório em questão. Isso define o contexto de segurança para o tipo esperado do diretório pai. Meus arquivos estavam em um subdiretório de / var / www, eles foram configurados para httpd_sys_content_t, e o Apache teve permissão para acessá-los. Se eles estivessem em outro lugar, eu teria que mudar o tipo manualmente.
Depois de resolver o problema do SELinux, as permissões de arquivo podem ser chmoded de volta ao nível usual sem mais problemas.