Have you checked for air leaks, allowing unmetered air into the engine? Easiest way to check is to spray some wd40 or similar around areas that air could leak into - if the revs rise (due to the wd40 burning in the cylinder) then you can track the leak down. Obviously the downside of this is the whole spraying a combustible oil around the engine thing, but you can do the same thing with water spray, and listen for changes to the revs.