I've had look at the V2 patch. Maybe you Pike folks can provide a bit more context. Main questions:
All the extra complexity for bug compatibility, is that still relevant? Is anyone using the $2a$, $2x$, $2y$ variants? What's done in BSD and GNU libc? Also, it's not entirely clear to me if these are fully under the control of the caller, or if the implementation selects variant depending on whether or not the input would trigger the old sign extension bug.
Interface requiring library users to call strcat is not so nice. Also in the implementation, there seems to be string handling all over the place.
Would it make more sense to have two functions, one taking a password and structured algorithm parameters similar to, e.g., pbkdf2_hmac_sha256, and producing the magic $2b$...$hash, and second one taking as input $2b$...$hash and the password, and returning true or false?
Why does it need to fiddle directly with blowfish subkeys, rather than calling blowfish_set_key?