Are there any differences between XCM and XCMP? I hear these words being thrown around and I thought they meant the same concept, but in some contexts, they appear to be different.
XCM and XCMP are different concepts.
To explain from its etymology, XCM stands for Cross Consensus Messages, whereas XCMP is short for Cross Consensus Message Passing. Both names should give you a hint that the former is a messaging format, while the latter is a transport protocol.
Or to use an analogy from Web 2.0, XCM is to HTML and XCMP is to HTTP. In short, XCM is what gets delivered, whereas XCMP is the delivery mechanism.
The additional complication here is that XCMP may refer to a general concept that encapsulates all other kinds of transport mechanisms for XCM, such as DMP, UMP and HRMP, or it may refer to a specific type of transport mechanism where parachains open a unidirectional communication channel to another in order to pass XCM messages directly.