I'm not sure if this will be helpful or not, but.... thought I'd spout off about some theories.
Based on my extensive PHP background (heh), it sounds like a multi-threading problem. I'm not a PHP expert, but I do know Java and general programming quite well (day job is working with Java on corporate finance systems.)
What's being described (sometimes it's 3, sometimes 8, sometimes 10) can be caused by multiple threads processing the mail queue. The 'simple' solution there is to make sure only one 'daemon' or thread processes the queue.
Multiple submits would queue up multiple emails, but I find users are generally unwilling to admit they've clicked the button 3, 8 or 10 times (which doesn't mean they didn't). Javascript on the submit button, or session tokens can be used to prevent multi-submits.
It's also possible there's a bad database join. Making sh*t up, let's say the user table that contains the email has multiple records (one for each edit you make to your profile). Only one of those records has the 'currentProfile' column set to true, which indicates which record is the current one. The other part of the system that queues up emails to people? It just records your username. The other code that emails then must join to the user table to retrieve your email address, but forgets about the 'currentProfile' column. So your email gets pulled 8 times (if you've made 7 edits to your profile). evidence for this: if you (you reading this) consistently get 'x' emails... make a simple edit to your profile and see if your next email is 'x+1'.
Finally, it's also possible that the emails are being re-sent, through some faulty re-try logic. Evidence for this: view the full headers... bad joins would show you nearly identical timestamps. If they're spread out a bit, it's some process that is re-sending because it thinks the first 'x' tries didn't work.