What actually happens during "Waiting for changes to be applied" and "Waiting for items to copy"? There are literally hundreds of threads on dozens of different internet forums about iOS devices that get stuck on "Waiting for changes to be applied" and/or "Waiting for items to copy" while syncing.  I have had that problem intermittently for two years, on iOS 6, 7 and now 8, and frankly after trying all of the fixes I have read about, I have given up on trying to solve it.  That's not what this question is about.  What I want to know is:


  What's supposed to happen during those stages of the sync?


Do those two messages mean the same thing, or something different?  What is iTunes trying to do?  Is it reading from an internal database on the device and comparing it to the iTunes library on the computer?  Is it writing to a device library?  What's it writing?  What file is it working on?  Is there any way to watch the activity that's in progress, either in real time or after-the-fact?
Although there is no official documentation by Apple, you can still get some information by watching iTunes and iOS doing their stuff. This can be done by monitoring log files of both, on the iPhone this can be done over an USB connection. Here's a couple of what I've already seen the iPhone doing in the "waiting for xy" sync stages:


After copying new media to the iPhone, the media needs to be indexed, e.g. there's metadata to be processed, thumbnails need to be created etc. Until that is done, the media can't be displayed correctly in the corresponding iPhone apps, so iTunes waits for the iPhone Media Indexer service to complete its work.
When copying new apps to an iPhone, the packaged .ipa-files need to unpack and install, e.g. register in the iPhone's homescreen, app lists, file extension databases etc, this is done during that stages of sync.
The spotlight search might need time to index new files, iTunes waits for this as well (not always, but sometimes!)
When iTunes transfers files to an iPhone, it always verifies the file's contents in several ways, being it archive integrity or hashes that are compared. These processes do need plenty of time, depending on the size of the transferred data, and iTunes waits for successful verification in order to complete the sync.
When there are copy failures detected by any of the verification methods, iTunes will copy the files again. Often these processes are not displayed by iTunes, it is done during the "Waiting for items to copy"-processing.
iTunes will also wait for copy processes to terminate successfully, there are streams and sockets to close when data is transferred between computers. Although this should happen instantly, sometimes there are failures and the iPhone needs some time.
In general, you can say that iTunes utilizes these stages for verification and error correction as well as doing "completional" work. They get extremely useful especially when using WiFi sync, which is much more error-prone than USB.


Edit: To view the log files of an iPhone/iPad, no jailbreak is required. The best tool probably is libimobiledevice, a bundle of free open-source software licensed under LGPL 2.1. It is capable of handling an iOS device without the need of iTunes, so even on Linux machines. Although being designed for Linux machines, it can be run on Mac as well, e.g. by compiling the source code, or, even easier, by installing through homebrew. Although I'm always using it on Linux machines, this should work the same way on Mac OS X.

You probably need to pair your iPhone first, use the idevicepair-binary for this. It should find your USB-connected iPhone on its own, if it doesn't, you can try passing the UUID of your device. After pairing succeeded (it will display a success-message to your terminal interface), use the idevicesyslog-application to view the log files of your iPhone. It will connect to the syslog-socket of your device automatically, if it doesn't, you may pass the UUID again. Then all log messages will get posted to stdout on your computer, e.g. to your terminal output.

There is proprietary software as well that allows you to read the logs on your iOS device, but libimobiledevice as a command line- and open source-tool should be preferred.