There are actually more pairs of sounds where this is an issue. There are two sounds for "th," for example. The th in "thin" is pronounced differently than the th in "they." We also pronounce the ending "ed" differently in different words. Sometimes it's with a /d/ sound ("buzzed") and sometimes it's a /t/ ("jumped").
I remember in an introduction to linguistics class we did exercises where we figured out guidelines for when we use which sound. It ends up depending on what sounds come before/after the one in question. So you could probably figure out which sounds lead to the /s/ vs. the /z/. Of course, having to memorize which sounds go with which would be daunting, but luckily there also tended to be ways to group them. The main one I remember is whether the before/after sound was voiced or unvoiced.
Voiced sounds are those that vibrate the vocal cords. Unvoiced ones don't. (Bet you had figured that one out already.

) Put your hand on your throat and say /b/, then /p/. You can feel a vibration for /b/ that isn't there when you say /p/. And if you get your lips/tongue in position to say /b/, you'll find that you can instead say /p/ without changing anything, because the only difference in production of those two sounds is in the vocal cord vibration or lack thereof. Other voiced/unvoiced pairs are /s/ and /z/, /d/ and /t/, /f/ and /v/, and those two sounds for "th" that I mentioned above.
So, if we look at words that end with s and have one of these sounds before the s, we see patterns:
cats/cads
caps/cabs
cafs/calves
If you read the first word on each line, you notice the /s/ pronunciation. If you read the second words, you have the /z/. What's really interesting, at least to me

, is that "cafs" is not a word, but most fluent English readers will pronounce it with the /s/. Even though we don't normally think about this voiced/unvoiced rule, we still apply it. I also think it's interesting that if you try to force yourself to put the wrong "s" pronunciation on each word, that word starts to sound more like its pair. So if you try to pronounce "cabs" with the s sounding like /s/, the b starts sounding more like a /p/.
For words that end with s and have vowels before them, like your "bus" example, I think it might vary by vowel sound, but I've totally forgotten how to group vowels (other than just by short/long, which might also be interesting to look at, but can't entirely explain things, since "has" and "bus" both have short vowels but different pronunciations of the s).
Okay, now that I've totally given away how much I enjoyed that one linguistics class that I took (and I really wish I had taken it earlier than senior year, because I probably would have minored in it if I had known how interesting I'd find it -- hard to believe it was 16 years ago!), I'm now going to say that unless your dd is really interested in all this, I would consider not bothering with all this very much. I think it's going to be much more helpful to suggest that she try the word with each sound and ask herself, "Is this a word? Does that word make sense in this sentence?" In some situations, she'll be able to rule it out with the first question ("has", for instance, only makes a word with the /z/ sound, not with the /s/). With others, the second question will clear it up ("bus" does make words with both sounds, but if the sentence is "He got on the ___ to go to school," then she can rule out the one that sounds like "buzz").
I don't remember being taught all these rules in elementary school and ways of figuring out which sounds to use. I don't think any of us were taught them in reading lessons as kids. But somehow we pick them up and use them without thinking about it. If a group of fluent readers (who all speak the same language) are given a list of nonsense words, they'll generally sound them out to sound the same (with some variations, especially in English, because there's always an exception in English

).
Hope something in here was helpful, or at least that I've amused you with how geeky I am.
