> If the header is not present, should it not be hashed as if it was the null string?

Looks like you are right. Will check and fix.

> Also, I'm unclear what this means, but it does not look like it is handled:

No, this is handled. DKIM-Signature header 1'st created with empty `b` tag in line 898, signed in line 899 and created 2'nd time with filled `b` value in line 903.