Hm... Frankly speaking I did not know that "проспать" is also "to oversleep" in English. I understood this verb as "переспать" only.
But well, I will remember it, thanks!
Then yes, I agree with other people here:
"переспать" is just to sleep too long, longer than expected.
"проспать" is to miss something due to the failure to wake up in time.
As to "заспаться", I would say it is like "to be too deep in your sleeping so that you deliberately ignore some other activities by considering them less important". It is a common pattern for this group of verbs:
"заиграться" - to be infatuated with playing so much that you forget other things to do;
"задуматься" - to be deep in one's thoughts so much that you do not notice something important around;
"зачитаться", "заговориться", "заучиться", "засмотреться", "заслушаться", "замечтаться" all convey similar ideas.