I have actually done this and it works. It's fairly reliable, too, all things considered. Is it a good idea? No, probably not. You may lose data or end up with corrupt files. With an ext3 partitions, at boot, you will get a warning that the partition "was not cleanly unmounted, check forced." It will then run 'fsck'. It may take a long time for fsck to return the filesystem to a clean state, but it will get there. An ext4 filesystem will do this faster.
Think about it this way, a 'dd' of a live filesystem is equivalent of pulling the power plug from a server while it is running. If you pulled the power plug from a server would you expect that the filesystem will be ruined and that the machine will not boot again? Of course not. Well, unless you had been updating your boot kernel or initrd or something. I'm sure there are other edge cases. But this is still not the ideal way to shutdown a system. Don't rely on it.
Also, running 'sync' is likely useless in this situation (I say "likely useless" because I'm not 100% sure of my facts here and I don't feel like fact-checking). Running 'sync' before the 'dd' step will not make the image any more consistent because 'dd' does not simply bypass the kernel and talk directly to the hardware. 'dd' still goes through the Linux kernel. If 'dd' requests data from dirty blocks (updated data that has not by synced to drive) it does not ignore this fact. In other words, 'dd' will actually copy the dirty blocks even though they have not been synced to the disk yet. Note that I believe there are options to ask 'dd' to do this (bypass the kernel buffers and talk directly to the hardware), but this is not the default behavior.