As you've found out, this won't work. The whole MTD/JFFS2/NAND-flash implementation stops you from using the standard Linux utilities to copy data directly to the flash. The problem is that NAND-flashes contain so-called OOB (out-of-band) data in addition to the normal data blocks. When you do a straight write to one of the device files (like /dev/mtdblock/3), only the data blocks are copied, while the OOB-data is computed and written by the MTD driver "invisibly" to the user. The unpacked .nfi file consists of complete jffs2 images, OOB-data included, so if you try to just dump this to the device, you will find that
1) it takes more space than it should on the flash (OOB-data is effectively written twice), and
2) the result is not a correct jffs2 file system, so it's unusable
OK, you might say, let's just strip off the OOB data also from the .nfi, write the data blocks to the device, and let the MTD device driver recompute the OOB data. Well, this won't work either, since jffs2 is actually using some of the OOB data for filesystem meta data. So you still won't have a valid jffs2 file system.
There are some programs in the mtd-utils package that should be able to do the job, but I have not used any of them (except flash-eraseall) myself. After a bad experience I had, when some scripts I made to backup the flash caused bad blocks to appear on a beta-tester's machine, I've stayed away from mucking around too much with NAND-flash. It's just too easy to make mistakes that are next to impossible to recover from.
And, BTW, as a personal opinion, I think you're going about this the wrong way. What you need is a program (running on the dreambox) that can unpack an .nfi file to the CF, and keep away from the flash altogether. The best starting point for such a program, that I know of, is the one that tmbinc wrote. It will need one semi-major change (i.e. unpacking to files instead of doing everything in memory) and some minor changes to become just what you need to unpack a .nfi directly to the flash (CF, that is).