I have a L2L tunnel established between a pix and 3020. Everything is working but TCP. I did a lot of tinkering on the 3000 running 4.7 and could have inadvertently caused this, perhaps? The ACLS and debugs on the pix/router side are showing TCP is passing on that end.
Can you post your acl? If I recall, there is no concept of protocol on the VPN3K. That is, when you define your "crypto acl" you use only network lists. I would change the acl on the pix to reference ip.
Also, any chance you could run a sniffer on a host on the VPN3K side, and send TCP traffic from the router side to see if you see a SYN packet on the remote host? That may yield more clues.
Hope this helps! If so, please rate.