Dude, I know exactly what you are talking about. I was playing with TCP/IP filtering myself and I came accross this thread when searching for the answer myself. Here is what I found out:
FYI: TCP/IP filtering is not for firewalling but only for filtering INCOMING packets. See Microsoft KB816792.
I used the Netowrk Monitor to trace the UDP packets and figure out what is happeneing with DNS.
The DNS client service binds to a random high source port. I had a W2003 server set to use my ISP's DNS on the NIC and repeated DNS queries using nslookup would send UDP packets to the ISP's DNS server from SOURCE port 3106 (or something like that) to DESTINATION port 53. Then the ISP's DNS server would reply from SOURCE port 53 to DESTINATION port 3106 for example.
This explained why my TCP/IP filtering was breaking DNS. I was only accepting incomig packets on UDP port 53 but the actual incoming packets were destined for port 3106, for example.
After lots of research I could not figure out a way to cause the DNS client service to use a specific UDP port. However, I could tell the DNS server service to use a specific port. Here is what I did:
Install the W2003 DNS server, set my NIC to use my own IP for DNS queries and then set my DNS server service to forward to my ISP's DNS server. Now the DNS client service still uses a random UDP source port to ask my own internal DNS server for DNS resolution. AND the DNS server uses a different random UDP port to ask my ISP's DNS server for resolution. However, check out Microsoft KB260186. I tried this on my W2003 server and it worked.