Basically, altering a setting on a pool or dataset does not affect the existing blocks. It just affects blocks that are written after that point (be they for new files or updated pieces of existing files). If you want to update all of the data to the new settings, you'll have to either copy it or zfs send it elsewhere and then bring it back to the pool so that it's all new data.
The copy-on-write nature of ZFS prevents it from altering the existing blocks based on new settings. Aside from fixing corrupted data, zfs doesn't muck around with existing blocks unless they're freed, because no dataset, snapshot, or clone refers to them anymore.