Quick differences (not comprehensive):
Lua Code:
IsUsableSpell() -- you can use it because it is available to your class and spec, and is not on cooldown
IsPlayerSpell() -- a spell player characters can cast, unlike a spell is that is NPC exclusive (check spellID, not spell name because there are spells with the same name that aren't the same)
IsSpellKnown() -- your character knows the spell because of class and spec; it is in your spellbook. Could also be a pet spell (I'm not 100% on that) that your combat pet can cast