It sounds like what you want is for the client to still see b.x.com in their browser bar but connect to the IP address of c.x.com instead, correct?
The problem with your example is that the translation of that host name to an IP address is up to the user to perform. If you redirect over to the IP address of the VIP for c.x.com then the user will see the IP address on their browser, and while you can rewrite the host header on the way back to the servers the user is still going to see the IP address in the address bar. If you try and send them to b.x.com again then the client will just do another IP lookup and send the requests back to your original b.x.com IP address.
I think your best bet would be to either use that VIP to VIP iRule like Hoolio suggested or to just duplicate the config of VIP c onto VIP b.
In that case you'd have two VIPs setup pointing to the same pools and with the same configuration, but they would be on their own IPs. Then you'd just have the redirect for a.x.com to the c.x.com VIP on the b.x.com VIP, and you're customers would see the same thing as if they were connected to c.x.com.
Really though, Hoolio's answer is probably the best way to simply management of the config and get you the same behavior as my alternate config. You can't really make them have the hostname of b.x.com show up in their browser and go to the IP of c.x.com unless you alter the DNS records.
Why not just make b.x.com a CNAME for c.x.com instead of a.x.com? That way the browser uses the IP of the c VIP for the b.x.com and you don't even have the issue.