I don't think that there are any general rules about word-internal vowel contraction in Latin that are clear, simple, and non-obvious enough to be useful.
Bennet (1918) gives a rule that contractions result in long vowels with the quality of the first vowel (Part I, "Vowel Changes"), but if you consider Latin to have a process of contraction that turns "ama- + -ō" into "amō", then that would be a kind of contraction that doesn't follow Bennet's rule.
Contractions (or elisions, which I will consider to be a type of contraction) occurred at various times in various words, but I think that the contexts where contraction might be considered a synchronically regular and productive process are the contexts where it is easiest to make the argument that something else is happening instead (e.g. allomorphy, or some kind of morphemic alteration). And on the other hand, the clearest examples of plain phonological contraction that I can think of are not regular/productive patterns.
Summary of contexts for contraction
Here are some phonological environments where contraction was possible in Latin:
- V-V morpheme boundary between prefix and vowel-initial base
- VhV sequences
- VvV sequences (e.g. prorsus)
V-V contraction in prefixed words
We see contraction of ĕ with a preceding vowel (to form a long vowel with the quality of the first vowel) in various prefixed words derived from the verb emō, such as dēmō, cōmō, prōmō, sūmō. The coexistence of cōmō and cŏĕmō (among other words starting in [ko.e]) indicates that contraction of o-e to [o:] did not always occur in prefixed words. We see a similar contraction in cōgō from co(n)- + agō, and the Lewis and Short entry for cooperio mentions the existence of a "contr. form coperiunt".
Another example of contraction is nīl, a contracted form of nihil. Likewise, mī existed as a contracted form of mihi. Other examples of VhV contraction would I think pretty much all fall into the previous category (of prefixed words) since prefixation seems to be the main source of intervocalic h in Latin. Bennet (1918) gives the example of dēbeō from dē- + habeō.
This actually seems to be a fairly common context for contraction, but I don't know that much about this kind of contraction in Latin.
Bennet mentions amāstī for amā(v)istī, which is a specific example of a more general set of contracted perfect forms. In addition, Bennet mentions mālō from ma(v)elō, and jūnior from ju(v)enior (I think the latter would probably only count as an example of historical contraction, not as an example of a synchronic process).
Elision of stem-final -a- or -o- as a proposed synchronic morpho-phonological rule
Despite the negative slant of this answer as a whole, I guess I'll finish by explaining the allusions I made in the first paragraph to synchronic processes of contraction in Latin. If you think of a-stem and o-stem nouns as having a single stem ending in a or o that is used as the base of all of their forms, then you have to explain where the stem-final a or o goes in inflected forms like magnī, magnīs, and magna (neuter plural). One possible explanation is that these forms synchronically have the structure magno-ī, magno-īs or magna-īs, and magno-a with where a morpho-phonological process of elision deletes the stem-final a or o before an inflectional suffix that starts with a vowel. The behavior of derivational suffixes attached to a- and o-stem nouns can be analyzed similarly (e.g. -ālis, -ōsus). This analysis is not based on and does not seem to correspond with the etymological development of Latin noun inflectional endings. Cser (2016) gives the following specific formulation for a proposed synchronic rule: deletion of the non-high back vowels a and o before other vowels in derived environments (p. 96-98). The restriction to "derived environments" makes the rule inapplicable to Danaōs, since the hiatus between [a] and [o:] in that name does not count as a derived environment in Latin.
Cser also supposes that a number of other fairly abstract processes can affect Latin vowels e.g. coalescence with an "empty vowel" is supposed to be the source of the long vowels found in forms like the ablative singular. Again, note that this is meant as a synchronic description of Latin grammar, not as a description of the etymology of these forms.