Contribution confirmation page is blank
After a long investigation, this seems to have been a hosting issue. For whatever reason, the rename operation in civicrm/packages/Smarty/internals/core.write_file.php was not occurring, possibly because the temporary files were created with 600 permissions. This only occurred when the templates were accessed by a front-end user. Templates accessed through the admin section were able to rename their temporary files.

Our hosting provider was unable to find a solution. We eventually migrated the site to Pantheon.io, and everything appears to be working well there.