Wow, that's one long rule! I'd suggest using a Data Group for the host names and another for the URIs. If nothing else you're rule will be faster and easier to read and easier to modify in future (you just add new hosts or URI's to the DGs). Hopefully and possible mistake in your current code will be cleared up with this too.
...
elseif { [class match [string tolower [HTTP::host]] contains host_dg ] } {
use pool XXX
}
elseif { [class match [string tolower [HTTP::uri]] contains uri_dg ] } {
use pool XXX
}
...