The source texture is always passed in the color slot of bindFrameBufferTextures, so a depth-format texture lands on COLOR_ATTACHMENT0 and the read FBO becomes GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT. glReadPixels then also asks for DEPTH_COMPONENT from a framebuffer that has no depth buffer. Vulkan does this correctly via formatAspectMask.
Can confirm.