I would check for any corrosion between the cdi unit and the stator. The engine vibrates at different rates as per the rpm´s. if a certain vibration causes an exposed wire to come in contact with the block(ground). it will throw off your timing for that range. if so use liquid tape to seal the exposure in the wire. If that isn´t the case.... try disconnecting the exauhst under the side cover, and check for obstructions in the back end of the pipe, and through the muffler. this could be an issue if you store the bike anywere mice can get at it. If there is a partial closing in the pipe, low range doesn´t need to breath as much as mid range. also top end will just power trough the clog, and feel like it´s running fine. mid range doesn´t flow enugh CFM´s to power through it. If this is the cause of your problem, clean out the pipe. I would also recomend somehow mounting a steel screen at the end of the pipe to prevent this from happening again. The screen will not restrict the exauhst enugh to cause any problems. Good luck and let me know how it works out for you.