DD's bad breath started at around 4 and got worse quickly. It was so bad I couldn't even have her speak straight to my face. DS's started a bit around 7. When DS was 8, I was looking at his uvula (as a joke) and noticed something white stuck to the top/side of his mouth. After googling, I found out it was a tonsillolith (tonsil stones). They are 'balls' of dead white blood cells and bacteria that get trapped inside the tonsil crypts ('pockets') and they smell like DEATH. Sure enough, I checked DD's and she had them too. Her tonsils were removed last July (swollen adenoids, mouth breathing, snoring, humongous tonsils etc.) and her breath is sweet smelling once more! DS's are easily flushed so I'm not worrying about his.
Long story short, you may want to take a high-powered flashlight and see if you can find anything.