Do we need to worry about the odd corner case of HTTP where "http://HOST/a/b%2Fc/d" decodes to "a/b/c/d" but may then fail on the remote server because the b%2Fc component was meant to be parsed as a single directory component of /a/ namespace and not as "b" by itself?

I think this is pretty unlikely. But it can happen here. It may be worthwhile at least writing a test case that shows this happens with URIish so its documented as expected behavior.