We got some helpful insight on this from Salesforce support:
This can occur if the same components are in both the package.xml and the destructivechanges.xml files. If we deploy and delete the same component inside the package.xml and destructivechanges.xml we will get the "Couldn't load apex class/trigger for compile" error. It seems it is not possible to execute both operations at the same time.
If this is the case, the advice is to complete any destructive changes before doing a deploy (as 2 separate ANT deployments) to avoid this issue. If you are completing the destructive changes separately, in order to deploy the destructive changes you must also have a package.xml file that lists no components to deploy, includes the API version, and is in the same directory as destructiveChanges.xml (https://developer.salesforce.com/docs/atlas.en-us.daas.meta/daas/daas_destructive_changes.htm).
In other words, you should do the following:
Step 1. Delete Components
Replace the current package.xml by an empty package.xm and deploy:
Step 2. Deploy Components (to add or update existing components)
Remove the destructiveChanges.xml from the ANT folder and replace the empty package.xml by the original one. Execute the deploy operation
If you ONLY want to delete components, follow Step 1 only