Another example: Imagine your ssn_private_file is really tiny, say 100 bytes. Many file systems (perhaps also ZFS, don't know) will not actually store that file in a data area on disk, but will store it in the inode itself. Depending on file system design, files up to several Kilobytes can be stored in inodes. Now you come and write one new fill_free_space.dd. It will use one inode, but your file system has hundreds of thousands or millions of inodes that are free. Most likely, the inode containing the data is still on disk, and unallocated.
As phoenix said: In modern file systems (those with features like snapshots, CoW, multiple storage pools, policy-based allocation, built-in RAID or use of multiple devices, clustering, remote replication and so on), space allocation is way more complicated than filling all free space. If you want to securely erase a file, you need the cooperation of your file system, to locate all the places on disk where the file is stored (or was stored recently). I don't know whether ZFS has a feature like "secure erase an individual file".
And as was said above: If you really want to securely erase that file, and you can afford to take down the whole file system this file lived on, the best thing to do is to locate all physical devices that file system has used, and securely erase each one of them. That can be done with a variety of format commands, which are often hardware-specific (in particular on disks that are internally virtualized, like SSDs or RAID arrays).