Ich versuch es mal zu erklären !
Mit margin-top z.b.
Sie können bestimmen, wie viel Abstand ein Element zu seinem Vorgängerelement oder zu seinem Elternelement nach oben hin hat.
Mit top (position)
Sie können bestimmen, wo ein absolut oder relativ positioniertes Element von oben beginnt.
Daraus folgt mindestens, das Bei div 40% von absolut Browser 0,0 (top)ist,
bei p allerdings ist es immer vom Elternelement abhängig.
Da der Browser schon von vornherein Abstände von 10px hat und der p tag auch schon vor formatiert ist, muss es unterschiedliche Positionen geben da nicht mehr Browser 0,0 sondern Browser 10,10.
Test einfach mal alles durch von 1% bis 100% dann siehst du das die Position proportional zu den % abweicht 
Noch ein Test,
1.zweimal div hintereinander machen
2.zweimal p hintereinander.
Wie du siehst ist bei p der Abstand relative zum vorObjekt.
Bei Div immer zu Browser 0,0 
Vielleicht hat einer noch genauer drauf 
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]