It appears that funcdefs are not tracked properly by the engine. Registering a funcdef, and then attempting to retrieve it immediately afterwards results in a null pointer being returned:
const int iTypeId = pEngine->RegisterFuncdef( "void foo()" );
asIScriptFunction* pFunction = pEngine->GetFuncDefFromTypeId( iTypeId );
From what i can tell, the internal type id to object type map isn't updated to include funcdefs.
Because of this, IsCompatibleWithTypeId doesn't work either.