Here's another idea that might sound REALLY gross, but it's a true story (happened to one of my brothers when HE was around that age).
He had this favorite blanket, but it had a tear in it that my mother didn't know about, and (as kids do) he was picking his nose at night and wiping his boogies on this spot. Tried the dentist for his bad breath, and NOTHING seemed to work. She finally one day noticed him doing this and took him into the doctor thinking it might be sinus related. The doctor found a wad of blanket stuffing up his nose and basically infected. He pulled that out, Mom sewed up the blanket, and tried to get him to blow his nose before bed so that he wouldn't be tempted. Took about a week, but he was free of bad breath after that, and hasn't had that problem again.
Now, I'm not saying you have a torn blanket anywhere, but you might have your doctor check his nasal passages before you go on antibiotics or anything like that. Sometimes something simple is the answer. Good luck!