They originate in different strata of Hebrew. Po is of biblical origin, and kan starts appearing in Rabbinic Hebrew. (It derives from a Biblical word, ko כה, which means "so, thus" and can also mean "here.") They each are part of words meaning "where" - the biblical eifo איפה and the rabbinic heikhan היכן.
What about the meanings? They both mean "here" and are often viewed as complete synonyms, even being the most popular example of two Hebrew words with the same meaning, and define each other in dictionaries. While in English having two synonymous words might not be remarkable, as we pointed out recently, "Hebrew has a hard time hanging on to synonyms."
And yet, a closer look does show differences in uses, even though the translation to the English "here" remains in place. This book does a good job of capturing those differences:
There is, however, a very basic semantic distinction between po and kan which — in my experience — most people take for granted but immediately recognize when it is pointed out to them. The word po is limited to the realm of space on the spatio-temporal-existential cline. It always refers to a specific and concrete place in the immediate or proximate vicinity. The word kan, on the other hand, has gone beyond the realm of space in the universal spatio-temporal-existential cline and may also be used for temporal and existential messages as well. The word kan may refer to specific places and immediate or proximate vicinities (like po), to the present time (the here-and-now), and to general relevant issues and situations (leadken - 'to bring up to date') (lit. 'to-until-here-now').
In other words, po is almost always talking about a physical place. Kan, on the other hand, can be about place - but can also be about time (like how far along you are in process), or even purely abstractly (like your understanding of an issue). "Here" captures all of those in English, but the difference in nuance in the Hebrew words are real. If you would say (without context), kan chashavti lehitpater כאן חשבתי להתטפר - "here I thought of resigning", it could mean "in this place" or "at this point in my life." But if you used po instead of kan, it would likely mean "in this physical place."
All that said, this article seems to show a trend in the opposite direction. Collecting examples of spoken Hebrew in the 1980s and 1990s, it found that po was used in the vast majority of cases. And while it recognizes the trend we mentioned above in "classical" Hebrew, it says that in the usages they studied, po actually was used in more varied circumstances than kan. This is how the English abstract describes the study:
The paper traces the fine distinction between two adverbs of location — פה and כאן — frequently regarded as an example of exact synonyms. Data based on a recorded corpus of native speakers are analyzed quantitatively and qualitatively, namely, using semantic and functional methods of sign-oriented linguistics. The findings show פה to be the dominant, unmarked term of the pair, found in 97 percent of the cases. Unlike in their classical use, פה may designate not only location but also temporal concepts, whereas כאן is restricted to locational concepts. Although their denotation is the same, the marginal field of their meaning differs. In certain lexical phrases, כאן carries a submeaning of 'border' or 'end', whereas פה has a submeaning of 'now', and functions as a half-empty prosodic or emotive filler, mainly in the existence (יש) sentence pattern.
While I don't challenge the scholarship of the study, the results have not been my experience. When it comes to a word describing the "physical" here, I haven't noticed a preference for po or kan. And I haven't seen po being used to designate "temporal concepts." It could be that my ear isn't that sensitive, or I'm not in the same social groups as the study, or that things have changed in the past 30 years. I'm happy to hear your experiences as well.
One word I didn't mention was hinei הנה which can also mean "here," but isn't interchangeable with kan and po. As this book puts it:
It might be translated as "here," but unlike the Hebrew synonyms for "here," "kan" and "po," it cannot occur in a mere descriptive proposition. "Hine" is used only presentationally; that is, I can say "hine hameil," here is the coat, when I point to the coat (hence the translation: "Behold the coat!"), but I cannot say, "Etmol hameil haya hine" (Yesterday the coat was hine) to mean "Yesterday the coat was here"; I have to say "Etmol hameil haya po" or "Etmol hameil haya kan." Thus hine performs the speech-act of calling attention to, or presenting, not describing.
So now I can state: hinei, the post about the Hebrew words for "here" is kan. (Or should I say po?)