What are the differences between ACARS and CPDLC?
CPDLC
CPDLC is used for communication to/from ATC facilities. As the name suggests, it's a controller—pilot link. An aircraft with CPDLC has one of the following panels/interfaces:
787 example:


The pilot can accept, cancel, or reject an instruction.

Uploaded instructions are automatically fed into the different MCP windows, for example UL (uplink) 250 for the speed. And a transfer (XFR) button to activate it. The RL in the heading window is the turn direction.

For route changes, those are fed into the CDU. There's also a text reply option via the CDU (multi function display on the 787). The message also appears on the aux display (outboard side of the display unit for the PFD):

The pilots can also send requests.


A330 example:
(wikimedia.org) The Datalink Control and Display Unit (DCDU) on an Airbus A330, the pilot interface for CPDLC messages.
Similar system but without integration into the autopilot control panel.
ACARS
ACARS is accessed via the control display unit, the same unit for controlling the FMC. Messages can be printed. It's mainly for company communication (between an airline and its pilots). The company uses the ACARS for Aeronautical Operational Control.

Sending wind aloft data, expected delays, METAR, load sheets, etc.
Receiving position reports, systems status, etc.

Also, messages can be relayed to/from ATC via the company during communication difficulties, for receiving delivery clearances, submitting oceanic position reports, etc.

Summary:

CPDLC is an ATC tool, and ACARS is a company tool but it can be used to relay messages to/from ATC.
CPDLC coverage is not global yet, it depends on the FIR to have it.
CPDLC utilizes VHF Data Link (VDL) and satcom. ACARS uses VHF, VDL, HF, HFDL, and satcom.