Also, the old text said that these headers should enable the client to identify whether it already has the resource -- that implies ETag and Last-Modified.  Those are response headers, not request headers.

The request headers can be deterministically extracted from the state of the stream on which PUSH_PROMISE is being sent -- there's no need for the server to echo them back to the client / intermediary.  On the other hand, getting a "preview" of the response headers is what enables a client to (perhaps) fire back a RST_STREAM for a resource it already has.