Outputting depth from the pixel shader disables early-Z, so that can come at a pretty significant performance cost.
On DX11+ hardware you can do texture reads in the vertex shader. You could tesselate the quad up to some level, read the depths, and interpolate them with the verts. That would let you keep the early-z! Then you would have to worry about the tesselation/quality tradoff, and how many polys are in the tesslated quad vs the model. This would also reduce the texture reads.
Also, the different zoom-scales of cascades in CSM would actually benefit the tesselation I think. More detail up close, and less further away.
Edit: 'Doh, you would have to sample the depth texture in the geometry shader, because tesselation happens after the vertex shader.
Also, it may be better to pre-bake out some tesselated quads instead of letting the tesselator do a bunch of redundant work. It would tesselate all of the object quads the same way. Then you could just use the vertex shader for the texture sampling. Managing those vertex buffers might be a pain in the ass though, so I don't know if it's worth it.