My son was driving my 2008 328i when the CEL came on, and when he stopped at a red light the engine started shaking. He pulled over and turned it off for five minutes, and restarted the car and drove around for 30 minutes without further problems...had the car for four months, and bought it with 96k miles.
As Floyd suggests, an experienced tech would FIRST read any Fault Codes and Freeze Frame Data saved in the DME (Engine Control Module) before presuming to make a SWAG about the cause. That said, I would suggest the following scenario as MORE LIKELY than any other I can think of:
1) Car now has ~ 100,000 miles and likely still on original plugs (at least some of them);
2) Plugs on 328i were originally gapped at .040" at factory, or if plugs were later replaced, they came "pre-gapped" to that spec;
3) Over 11 years & 100,000 miles that gap has increased to .055" or more, just from several million explosions of fuel mixture in each cylinder over that time; that excessive gap can cause random intermittent misfire, particularly at High Load, and High RPM (>5,000 RPM)
4) Trusted son enjoys the sporty capability of 328i and takes foray to redline in at least 1st gear on one or more occasions;
5) On one such occasion, the engine starts to shake as if it is now running on 5 of 6 cylinders (ONLY because it actually IS running on only 5 cylinders ;-);
6) Trusted son omits reference to events BEFORE being stopped at light. :tsk:
7) Scan tool will show a fault code between P0301 & P0306, indicating "misfire" on cylinder #1 to #6, depending upon the last digit 1 through 6. Scan tool will ALSO show Freeze Frame Data (kinda like a Red-light camera ;-) showing load, RPM & perhaps vehicle speed at the instant said "misfire" code was saved in DME memory (Gotcha Sonny ;-)
8) ALL that data is still saved in your DME memory and can be read with simple generic P-code scan tool, cost ~$35.
9) Trusted son actually NOT to blame for being a good "test pilot" and enjoying the G-forces. That's the best way to identify old plugs which should have been changed some time ago, and maybe you can simply use this as an excuse to get him to change them. Plug cost ~ $50 for a set of Bosch plugs. Labor ~ 2 to 3 hours including time for novice to read the procedure in TIS or Bentley (post back for that info if needed) and take the time to learn how to remove the cabin or micro filter housings, coil cover, and try to get coil boots that have become bonded to plugs over 11-years time loose.
I would HIGHLY recommend getting a Scan Tool for your own use in reading codes & Freeze Frame Data which is often helpful in getting a better idea of why the code was set under certain conditions.
At LEAST get someone like Advance Auto or Autozone to read the codes for you (see if they can give you Freeze Frame Data as well). Let us know what the codes are and someone can suggest next steps. Often the best course, if a misfire code, is to simply clear the code (after recording code & FFData for future reference or fault history), and then have trusted son resume Test Pilot duties (Italian Tuneup) to see if SES re-lights. If now you have a misfire on a different cylinder, it's almost certainly due to old plugs. If the same cylinder 2 or more times after clearing, then other steps (swapping coils between cylinders, checking injector wiring, etc) are suggested.
Be aware that the DME is programmed to shut down the injector to a cylinder that has a "serious" misfire, so as NOT to dump unburned fuel into a Cat and causing a Cat fire or damaging the catalyst. That feature can cause a situation where the SES remains lit and engine running rough for 30 to 60 seconds, at which point the SES goes out and normal performance returns. Turning the engine off & then re-starting can have the same effect. I personally experienced that with my 2007 328xi a week or two after I bought it >100,000 miles, on two different occasions, each time immediately following redline in 1st & 2nd. I changed the plugs (gap had expanded to nearly .060") and never a problem since. YMMV.
George