When you create a snapshot, zero data is written. Only a timestamp is noted down.
Everything you do on the volume/dataset (or previous snapshot) since that snapshot datetime is saved in that snapshot and the base volume/dataset (or previous snapshot) remains untouched.
When you destroy it, you 'lose' all changes made since snapshot time, being the diff.
If you rollback to a specific snapshot, all snapshots made after that one are then obviously destroyed.
Dunno if it's possible via the gui to rollback to anything besides the last snapshot though.