Drupal can be a pain. After a whole day of development, we started getting 'Access Denied' errors on all content that should be accessible by the anonymous user. The cause turned out to be something to do with a module incorrectly altering the node_access table.
Running this query fixed it: