My vote is a weak coil pack. This happened to me this week, only the code it finally threw was just for #3 misfire. You stated good spark from coils, but did you check resistance on them? It takes only a couple minutes to swap one coil pack, and if you had just one new one you could swap it around to see which old one is bad. I had a spare engine and borrowed a coil from it then went comparison-shopping for new coils.