What's the difference between a heap and a priority queue?

A priority queue is an *abstract* data structure. It specifies a behavior, an interface listing the methods it supports.

A heap is a possible *implementation* of the "priority queue" interface. It tells you how the elements are laid out in memory and how to process the operations.