in v0.12 https://github.com/bitcoin/bitcoin/pull/7081 (by @luke-jr) was merged adding `-bytespersigop` (with default of 20).

this is preventing simple bare multisig transactions from being accepted into mempool when the size is < 400 bytes.  
eg; https://gist.github.com/rubensayshi/ac4f617207f7a50559e85d61c05800be

from 1-of-7 and onwards they are accepted because the ratio of bytes:sigops is high enough.  
also having 2 or more inputs will work because it again tips the ratio of bytes:sigops over.

the reason mainly being that `GetLegacySigOpCount` calls `GetSigOpCount` with `fAccurate=false`.

It looks like changing `GetLegacySigOpCount` to use `fAccurate=true` would cause side effects in the few other places (`ConnectBlock`, `CheckBlock`, `CreateNewBlock`) and simply adding `fAccurate` as arg to `GetLegacySigOpCount` would affect the value stored in `CTxMemPoolEntry.sigOpCount` which in turn affects a bunch of other things.

{
private:
    CScript scriptPubKey;
    CAmount amount;
    const CTransaction *ptxTo;
    unsigned int nIn;
    unsigned int nFlags;
    bool cacheStore;
    ScriptError error;
public:
    CScriptCheck(): amount(0), ptxTo(0), nIn(0), nFlags(0), cacheStore(false), error(SCRIPT_ERR_UNKNOWN_ERROR) {}
    CScriptCheck(const CCoins& txFromIn, const CTransaction& txToIn, unsigned int nInIn, unsigned int nFlagsIn, bool cacheIn) :
        scriptPubKey(txFromIn.vout[txToIn.vin[nInIn].prevout.n].scriptPubKey), amount(txFromIn.vout[txToIn.vin[nInIn].prevout.n].nValue),
        ptxTo(&txToIn), nIn(nInIn), nFlags(nFlagsIn), cacheStore(cacheIn), error(SCRIPT_ERR_UNKNOWN_ERROR) { }
    bool operator()();
    void swap(CScriptCheck &check) {
        scriptPubKey.swap(check.scriptPubKey);
        std::swap(ptxTo, check.ptxTo);
        std::swap(amount, check.amount);
        std::swap(nIn, check.nIn);
        std::swap(nFlags, check.nFlags);
        std::swap(cacheStore, check.cacheStore);
        std::swap(error, check.error);
    }
    ScriptError GetScriptError() const { return error; }