It appears that occlusion queries somehow ignore shader discards, as if the depth buffer is still being written to:
The transparency shader discards every other pixel, as a way to approximate alpha blending in a deferred renderer. I did a quick post-process effect to view depth values, and the discarded pixels are definitely not being written to the depth buffer. Yet somehow the occlusion queries are acting as though the discard didn't happen.
The reason the results are not pixel-perfect is because the occlusion routine discards octree nodes rather than individual objects.
I am able to produce this error with an AMD R9 290 on Windows 7 64-bit, with driver 14.9. The renderer is using OpenGL 4. I can provide Steam keys for the application for testing upon request.