I have a small server at home running CentOS. However, when I fire up iptables, it drops ALL traffic.. When iptables is shut down, all traffic is allowed. I can't figure out what is going wrong. Only port 80, 20, 21, 22, 443 and 8443 should be allowed in. All other incoming traffic should be blocked.

Then:
0. move all lines with the loopback device to the top of the chain. You need it anyway plus getting the device out of the way means not having to explicitly name remaining devices (unless you got several requiring different rules).
1. move the "RELATED,ESTABLISHED", "--reject-with tcp-reset" and "--state INVALID" lines directly below those. The reason for this order is that Netfilter rules work in a "first match wins" way. Most machines generate a lot of requests themselves and you want to get those performance-wise dealt with quickly.
2. below that create a new "-m state --state NEW -p tcp -m tcp -m multiport --dports 3306,5432 -j TRUSTED" rule and dump your "-s INETn/32" addresses in the "-A TRUSTED" where they only require "-j ACCEPT". Make the last two rules in the TRUSTED chain a "-j LOG" and a "-j RETURN" (or "-j DROP") if you want to keep tabs on requests you miss (or not) from other hosts. The reason is, order and performance-wise similar to the rule above plus these machines have a direct relationship and all require similar access so you can reduce rules by half.
3. below that add your SSH-IP SSH rule and ensure it (and all rules below) got the right "--state NEW "as well.
4. below that add your UDP DNS rule.
5. below that group your "-p tcp -m tcp --dport port -j ACCEPT" rules turning them into a single rule using "-m multiport".
6. below that add your ICMP rule.

Remove all rules from the filter table FORWARD chain and add rules when and if you need to (prolly read the Frozentux Iptables tutorial).
Remove all rules from the filter table OUTPUT chain and set the policy to ACCEPT.