I've seen all four used in the context of something being finished. What's the difference between them?
My non-native intuition, with examples stolen/adapted from alc:
済む means "to complete", in the sense that its negative implies that there are things lacking, or things yet to do/happen. Perhaps 済んだ has the sense of "over and done with", and has a slight feeling of relief about it. 済まない means "it is not finished", and implies that the speaker feels a sense of guilt hanging over them; more commonly written すまない (すみません), it means "sorry" (probably with a feeling of "I am in your debt").
- 済んだことだ。 It's in the past. 済んだ話 a story from someone's past; all in the past
- これで済んだと思うなよ。 You won't get away with this. (lit. Don't think it's finished with this.)
- 仕事はほぼ済んでいる to be nearly done with one's work
終わる simply means "to finish", "to end", "to come to an end", "to cease", etc. It refers simply to the point at which something stops, and doesn't necessarily imply that anything has been finished or completed, merely that it has stopped.
- 終わることのない戦い an endless struggle
- テストが終わったよ。 I just finished my test. (lit. the test ended)
- 着替えは終わっている to have clothes on (lit. the changing clothes is finished)
出来る is an interesting verb. It usually means "to be possible" (more often translated as "to be able", but be careful - it's actually intransitive). It doesn't mean "to finish", but certain tenses allow it to take on a similar meaning. It can also mean "to be built/set up".
- 出来た！ I managed it! (lit. I was able to do it! It was possible! I was up to it!)
- 新しく出来た市立図書館 the new (lit. newly built) city library
- 最初の結婚でできた子ども child from (someone's) first marriage (lit. a child that arose from / came about from...)
上がる also doesn't mean "to finish" on its own. As a suffix verb, it means something like "do thoroughly" or "to completion", so 焼きあがったばかり means "freshly baked (to completion)", 出来上がる means "to be completed / ready", 仕上がる means "to be finished" (the 仕上げ are "finishing touches"). It can also mean something like "to go as far as it can go": 煮上がる means "to boil up" or "to be completely cooked".
They all means "to finish", but "to finish" has two different meanings.
One is "to get through" or "to come to an end", which means something ended.
The other is "to complete" or "to come to be available", which means something is ready.
済む, 終わる = the former
出来る, 上がる = the latter