どうやらsq_call関数で関数実行後にスタックをポップしている部分でデータが壊れているようです。
suspendはwakeupでまたスクリプトを起動するのだから、引数の数だけポップする意味がわかりません。
これはバグなのでしょうか?
ちなみに自分の使っているsquirrelのバージョンは2.1.1です。


SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror)
{
    SQObjectPtr res;
    if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror?true:false)){
        v->Pop(params);//pop closure and args ←※ここ
        if(retval){
            v->Push(res); return SQ_OK;
        }
        return SQ_OK;
    }
    else {
        v->Pop(params);
        return SQ_ERROR;
    }
    if(!v->_suspended)
        v->Pop(params);
    return sq_throwerror(v,_SC("call failed"));
}