Well, every project/customer uses his own terms based on his own habits.
If you refer to ISTQB glossary, both terms have the same meaning (altought I don’t necessarily agree on this point like most of you but it’s only due to my own experience).
IMHO the main difference resides in the strategy you apply to each subset of test (smoke, sanity, regression…).
If failed sanity tests doesn’t lead to any exit criteria, does it even worth giving them a name or another ?
On the other hand, if any failed test during smoke test leads to build/release rejection, then it woth defining the term and specifically follow and report the associated results.