Rhotacism in Latin happened because of a series of sound changes. It only affected inherited *s in specific environments.
The first step towards rhotacism is believed to have been voicing of single "s" to the sound [z] in between vowels (and also after a vowel and before the semivowel v [w]; thanks to TKR for pointing this out in a comment). This kind of voicing change is common historically; for example, it also occured between Classical Latin and many Romance languages. Double ss remained unvoiced.
In some related languages, such as Oscan, /z/ remained as such between vowels and did not undergo rhotacism. We know this because we have Oscan inscriptions written in the Latin alphabet that use the letter Z for this sound (Buck 1904).
The next step of rhotacism (z > r) is a little less common across languages, but we do have some other examples. The process also applied historically in Germanic; one place where you can see the result in English is forlorn, which is historically related to the verb lose. Rhotacism is thought to have occured in Old Latin, and to have been complete by the 4th century BCE. In 312 BC, the letter Z was discarded from the Latin by censor Appius Caecus Claudius (Gorman). (also see: Why are there no native Latin words with a Z?)
As a result of these changes, original intervocalic *s ultimately became r in Classical Latin. In the ancestor of Latin, *s seems to have also been voiced to [z] after the voiced consonant /r/, so another related sound change is original *rs to Classical Latin rr. One word that shows this change is terra "earth," from Proto-Indo-European *ters- (“dry”). The cluster rs that occurs in Classical Latin is a simplification of earlier *rtt or *rts; this is why most words with rs also have rt in some forms or in related words (such as ars "art," genitive artis).
Aside from these three environments (between vowels, between a vowel and v, and after r) I can't think of any other cases where Latin r regularly came from earlier *s. Once the sound r became established in certain words, their derivatives might come to have it in other environments. For example, as Joonas Ilmavirta mentions, some words such as honor developed final r instead of s after a vowel; it's believed this is due to the presence of r in other related forms (like honoris). There also seem to be some words with r before another consonant where the r was originally intervocalic *s, but the following vowel was lost (as in veternus). Another strange word is carmen, which Lewis and Short say used to be casmen.
Single intervocalic s did exist in Classical Latin; we believe it was pronounced [s]. In many words, it corresponds to inherited *ss which seems to have become shortened in some environments. Other words with intervocalic s have been explained as borrowings from other languages, such as Greek or Italic languages such as Oscan that did not undergo rhotacism. Whatever the reason, their presence indicates that rhotacism was not active as an automatic sound change in the Classical era (Gorman).
References:
- Buck, Carl Darling. 1904. A grammar of Oscan and Umbrian : with a collection of inscriptions and a glossary
- Gorman, Kyle. "Latin Rhotacism for Real"