[ŋŋ], [ŋɣ] became [ŋg]; [ŋ{ŋɣ}] > [ŋg]

[ŋŋ], [ŋɣ] became [ŋg]; [ŋ{ŋɣ}] > [ŋg]

In Common Eldarin, a double or dynamically-lengthened ŋŋ became ŋg. This sound change was mentioned several times in both the first and second versions of Tengwesta Qenderinwa from the 1930s (TQ1) and 1950s (TQ2):

but in Quendian ŋŋ > ŋg (TQ1, PE18/41).
In Eldarin ŋŋ > ŋg (TQ1, PE18/64).
in Quendian ŋŋ > ŋg phonetically (TQ2, PE18/91).
ññ > ñg as in all Eldarin (TQ2, PE18/104).

Tolkien elaborated on this development in some detail in the (Quenya) Outline of Phonetic Development from the 1940s (OP1), and even more in the (Quenya) Outline of Phonology from the 1950s (OP2):

[ññ] could only occur as a dynamic lengthening, since [ñ] was not used in suffixion: this [ññ] > ñg in CE (OP1, PE19/47).
The long dynamic mm, nn, ññ. ... This is the only source of ññ (since ñ was not used as a suffixal consonant and did not occur as the third consonant of KALAT-bases or kalta-stems) except ññ by nasal-infixion in the rare cases of bases with medial ñ ... These even when ancient remained as long nasals in PQ (mm, nn) except ññ which became ñg. ññ was or became rare, because after the loss of medial simple ñ the relationship of (nil) to ñg became etymologically obscure. A probable example is Q eñge “ago, in the past”, most likely in origin a past formation from √EÑ “be”, though no longer used in PQ (OP2, PE19/96).

Based on these notes, it seems the combination ŋŋ was rare even in Common Eldarin. It only arose (a) as a dynamic-lengthening of ŋ or (b) as the result of a nasal-infix (e.g. in past tenses) before ŋ. The former was rare because the strengthened form of ŋ was more commonly ŋg (which may have aided ŋŋ > ŋg). The latter was rare because roots ending in ŋ were themselves rare.

In notes from the 1930s, Tolkien indicated that primitive ŋʒ [ŋɣ] likewise became ŋg, passing first through ŋŋ:

There are no certain examples of [ʒ] following after other consonants save the nasal infix. Here the phonetic result of ñʒ was ñg > Q. ng. A case is probably seen in Q enge “ago, once (in past)”, originally pa.t. (“it was”) of the √ “be” from which ea is derived, though the pa.t. is from a different stem (OP1, PE19/48).
while ŋŋ, ŋʒ became [ŋg] ... In early formation [mv] > [mb], as [ŋʒ] > [ŋg] ... mv > mb; ŋʒ > ŋg; ŋŋ > ŋg (TQ1, PE18/41).

In the second note, Tolkien indicated that both primitive voiced labial and velar spirants strengthened to stops after a nasal, but the change mv > mb became irrelevant when Tolkien decided v [β] was not a sound in Primitive Elvish. There are, however, notes from the 1950s indicating that the sound change ŋʒ > ŋg remained valid for some time:

Before k, g, ñ remained unchanged. ñʒ > ññ > ñg (OP2, PE19/95 note #131).
There is no certain example of the occurrence of CE ʒ after any nasal save the naturally homorganic nasal infix. In CE ñʒ > ññ > ñg (OP2, PE19/98 note #146).
As noted above there are no examples in Q of [ʒ] following after other consonants, save the nasal infix (homorganic): this ñʒ > CE ññ, ñg (OP2, PE19/101 note #154).

Tolkien ultimately revised all of these notes and removed the sound change ŋʒ > ŋg, probably because he decided the primitive form of this sound was a weak voiceless spirant h rather than the voiced velar spirant ʒ (OP1, PE19/69 note #3). It is not clear, however, how ŋh would have developed (assuming it occurred at all).

References ✧ PE18/91, 104; PE19/96, 98

Related

Phonetic Rule Elements

[ŋŋ] > [ŋg] ✧ PE18/91 (ŋŋ > ŋg); PE18/104 (ññ > ñg); PE19/96 (ññ > ñg); PE22/149 (ŋŋ > ng); PE22/149 (-nŋ > ŋŋ > ng); PE22/149 (ŋŋ > ŋg); PE22/149 ( > ŋg)
[ŋɣ] > [ŋg] ✧ PE18/102 (ʒ > g; after a nasal)

Phonetic Rule Examples

aŋŋal > aŋgal ŋŋ > ŋg aññala > Q. angal ✧ NM/350
aŋŋal > aŋgal ŋŋ > ŋg aŋŋala > Q. angal ✧ NM/353
eŋŋe > eŋge ŋŋ > ŋg > Q. eñge ✧ PE19/96

ᴹ✶[ŋŋ], [ŋɣ] became [ŋg]; [ŋ{ŋɣ}] > [ŋg]

See ✶[ŋŋ], [ŋɣ] became [ŋg] for discussion.

References ✧ PE18/41, 54, 64; PE19/47-48

Phonetic Rule Elements

[ŋɣ] > [ŋg] ✧ PE19/50 (ñʒ > ñg)
[ŋŋ] > [ŋg] ✧ PE19/50 (ññ > ñg)

Phonetic Rule Examples

aŋŋolǝ > aŋgolǝ ŋŋ > ŋg ᴹ✶aññol- > N. angol ✧ Ety/ÑOL
aŋŋolǝ > aŋgolǝ ŋŋ > ŋg ᴹ✶aññol > N. angol ✧ EtyAC/N
liŋŋē > liŋgē ŋŋ > ŋg ᴹ√LIÑ > liŋŋē > ᴹQ. †linge ✧ PE22/103
oŋŋolǝ > oŋgolǝ ŋŋ > ŋg ᴹ✶oññol- > N. ongol ✧ EtyAC/ÑOL
taŋŋē > taŋgē ŋŋ > ŋg ᴹ√TAÑ > taŋŋē > ᴹQ. †tange ✧ PE22/103
eŋɣe > eŋge ŋɣ > ŋg ᴹ✶e-ñ-ʒe > ᴹQ. †eñge ✧ PE22/122
eŋɣe > eŋge ŋɣ > ŋg ᴹ√ > ᴹQ. enge ✧ PE19/48