I think i see a bug:

line 273 of key.cpp

        if (rec<0 || rec>=3)
            return false;

Afaict, 3 is a perfectly valid value, meaning 25% of sig-> key recoveries would fail erroneously...