А good question!
I would say: закончить is more generic, you can use it almost universally (with both nouns and verbs):
закончить школу, закончить работу, закончить рассказ, закончить предложение;
закончить учиться, закончить работать, закончить говорить, закончить писать.
Окончить is 1) more specific and 2) I think it's more formal.
I think it's most commonly used in the context of окончить школу (институт, университет).
I do not think it can be used with verbs, only with nouns: one can say "Он окончил институт", but I can hardly imagine "Он окончил учиться", it should be "Он закончил учиться".
More opinions are welcome.