If you're feeding her a 'crappy food' then I would guess that's the problem. Royal Canin is not a high quality food. What was she on before and did she have the same problem? At 9 months old she should be holding it all night long but (and I'm sorry to go against what your vet says buuut...) especially at 3 pounds keeping food from her from 4:00 until the next morning is not a good idea no matter how much she eats throughout the day.
Do you have a Petco near you? They sell a brand called Natural Balance, it's an excellent food and not too pricey. Some of their foods were in the recall but not all of them. You can compare doog food brands here:
http://www.dogfoodanalysis.com/ The better foods have the higher star rating but the 6 star foods are too high in protein for Yorkies. We feed Nature's Variety raw, you can check it out here:
www.naturesvariety.com Also, have you thought about home cooking?