dd-wrt is simple and has a good ui but not really open/no real tinkering possible etc
openwrt is very open and community-like (with actual VCS, package building scripts, package manager, and so on), easy to tinker and so on. But there's no neat and simple UI. Command line or uhm, "half decent UIs that u have to install and setup"
tomato has a very good UI, is open source, but isn't really all that easy to tinker with (none of the openwrt niceties)
I generally go with openwrt because, i like command line anyway, and i like being able to make my router do absolutely everything. for example, patching my openvpn and installing the package took 5min with openwrt.
Basically, if you're not into tinkering i'd just go with tomato. If you are, i'd go with openwrt. If somehow tomato doesn't work for you, dd-wrt.