Assumption is directly derived from Latin assumptionem which does have a P, so it also has a P. Assume on the other hand is derived from Latin assumere, which didn't have a P.
Other similar examples include presume/presumption and consume/consumption
Articulatory reasons for the P
The epenthetic P is probably inserted for articulatory reasons.
Epenthesis happens for a variety of reasons such as:
- ease of articulation
- to prevent adjacent vowels in a hiatus (e.g. idea of being pronounced idea[r]of in most non-rhotic accents)
- to simplify consonant clusters (some people—mostly non-native speakers who don't have complex clusters in their native language—pronounce words like screen, scratch, school with a preceding vowel to break the consonant cluster).
Epenthetic stops between nasals and fricatives
There are many situations where epenthetic consonants are inserted. Most of the time when there's a voiceless fricative (/s ʃ θ/ etc) after a nasal (/m n ŋ/), we tend to insert an epenthetic stop (/p t k/ etc) between both the fricative and a nasal. The reason is because the air comes out through the nose while articulating a nasal and as the nasal changes to a fricative—an oral consonant—the airflow must be switched from nasal to oral and should be stopped before articulating an oral consonant, so there is a brief period in which both the nasal and oral airflow are stopped, this is a brief oral stop, homorganic (same place of articulation) with the nasal.
The same thing happened to assumption in Latin before it entered English (as Colin Fine explained). There's a voiceless fricative /ʃ/ after a nasal /m/, so when changing from nasal to oral, Latin speakers put an epenthetic stop /p/ (homorganic with the nasal) between the nasal and the fricative.
The stop is more likely if the fricative is voiceless, when the articulatory system has an additional voicing change to handle. It’s less likely if the fricative is at the beginning of a stressed syllable as in in'sist (no epenthetic stop).
There are many examples of epenthetic stops in present day English:
*: Edited after Colin Fine's answer because I was in the middle of explaining when they posted their answer.