If you can feel the engine misfiring, you will need a professional level scan tool such as a tech-2 or equivalent to be able to graph the engine misfire events to see which cylinders are misfiring. If there is one particular cylinder misfiring far more often than the others, then swapping ignition components or the fuel injector with a cylinder that is not misfiring can be helpful in identifying the cause of the problem.
You stated that the head was replaced a while back... you should be aware that there is a technical service bulletin on this problem for this engine which specifies replacing intake and exhaust valves (exhaust valves only on some VIN numbers) with redesigned ones to improve valve sealing to correct a P0300 random misfire fault. If the head that was installed has the original style valves, that could very well be the source of the P0300 misfire problem.
Once you have the misfire condition corrected, you will also need to perform a cam/crank relearn; if this is not done it can also result in a P0300 (but not a misfire condition).
If you have one specific cylinder misfiring alone, with no misfires on any of the others, then you would likely get a cylinder specific code stored. If you ahve multiple cylinders misfiring, or the engien is running roughly for any reason, then the computer will be unsure exactly which cylinder is misfiring and will store the P0300.
You would think that the GM dealership would install the latest design revision of engine components when the head was replaced, but I can tell you that in my experience some dealerships do not always follow the manufacturer's procedures. The GM dealership up the road from where I work does not even install many genuine GM parts at all; when customers come in for routine service they get parts from Autozone or Advance in their cars unless they specify otherwise because the dealership service department makes more profit on them. So, if you have any doubts you may want to call and check to see what parts were installed when the head was replaced just to be sure. the service bulletin from Gm with the valve design revisions explained is #05-06-01-030A .
I do not know for sure if this is what is causing your P0300, but it is a common cause on this engine and must be checked as part of your diagnostic investigation.
If you have a noticeable misfire, I would start with an engine compression measurement before proceeding any further to check for internal mechanical issues.
An EGR valve stuck open will generally make the engine idle very poorly, but run normally at higher speeds.
When diagnosing a misfire condition a compression test is one of the things that should be done early in the process, just to make sure there is not some base mechanical problem such as a burned valve, stuck ring, or cam timing problem. The condition that the service bulletin addresses (valves not sealing at certain engine speeds or intermittently) may or may not show up on a compression test.
If cranking compression is normal (all measurements within about 10% of each other), the next thing to do is to use a scan tool with misfire graphing capability to perform a cam/crank relearn, and then to determine which cylinder(s) are involved in the problem. It will be extremely difficult to find the cause of a speed specific misfire if you cannot first determine what cylinder(s) are involved while the condition is occurring...
If you do not have access to this equipment, you may want to take the car in to your mechanic to be diagnosed before replacing anything. Professional diagnostic testing will cost an hour or 2 of labor charge, but will likely be far cheaper than trying parts at random and not fixing the problem. There is nothing shameful about having someone with the proper test equipment check to find the cause of the problem; many professional mechanics sublet jobs to other shops when special tools are required for a certain job that they do not have. it is usually far cheaper than buying special tools for one specific repair.