It appears that this may not be possible, as noted in this blog postthis blog post about the Outerra engine.
I successfully moved the log depth buffer calculations into the vertex shader. This solved my problem with the Early-Z testing, but it also led to deal-breaking artifacts with triangles that were too close to / crossed the camera. Apparently the only way to fix this is with a tweak in the pixel shader which will break the Early-Z again!