I have experienced something very similar to this before.
I could connect to the FTP site, however if I tried to send or receive data it timed out. The LIST command after all requests data to be sent about what files are on the site.
I know that you are specifying PASV and that in passive mode you should only need to allow port 21 from the "well known ports" through.
It might be worth opening port 20 and running Active mode to test, incase the server side firewall is blocking the random higher port number used by FTP in passive mode
EDIT:
Check the following link for more info:
http://www.slacksite.com/other/ftp.html