Each block includes both a state root and the whole state tree. In the state trees, do key/value maps reference state trees from other blocks ?
Each block includes both a state root and the whole state tree
This is incorrect. Each block header contains the latest state root, but blocks do not contain the state tree or any other reference to it besides the state root. The state tree is built up in an independent database by running all transactions. The only reference to previous state trees is the state root in previous blocks. That said, the design of the state tree allows for massive de-duplication - only pieces of the state tree that are updated by a transaction need to be updated on disk, the rest can stay as it was.
Key/Value maps store the revised values of the contract variables, after a round of execution (new block mined). There is no linkage (thru these variables) to previous values. These are just independent, periodic snapshots of variable states, block after block.