I checked this further and I cannot find any difference. I checked if I missed something in my vsftpd.conf... nope.
Your VS config seems OK, too. Can you check for the destination 0.0.0.0:0 (any) and the iRule? That seems off....
In my Wireshark capture it looks like this:
vsftp server ----> floating self-IP >> ftp.passive.ip==<IP address of the vsftp server>
virtual server ----> client >> ftp.passive.ip==<IP address of the F5 virtual>
So the value for ftp.passive.ip get's updated and replaced properly.
I tried with FileZilla and WinSCP, no special config required there either. Just works.