When you read from your original volume (that has been changed
to be of "snapshot-origin" type), you actually read from the
"real" volume (the original version of the original volume), but
when you write to it, the system makes sure that unless it has
been done already, the block you're modifying are being copied
first from the "real" volume to COW volume before being modified
in the "real" volume.
So to sum up, the "snapshot" volume you are creating is a
"virtual" volume that is a front end to both the snapshot
storage volume ("COW") and the original real volume ("real").
Hope this clarifies a bit,