Version/build fields for an iOS app include:
"Version" CFBundleShortVersionString (String - iOS, OS X) specifies the release versi
The CFBundleShortVersionString should match the version number you give iTunes Connect. It is also the version number that appears when the user looks at your App in the App Store.
The version number is shown in the store and that version should match the version number you enter later in iTunes Connect.
Source
The CFBundleVersion is not displayed in the App Store, but is used by the iTunes to determine when your App has been updated.
If you update the build string, as described in “Setting the Version Number and Build String,” iTunes recognizes that the build string changed and properly syncs the new iOS App Store Package to test devices.
Source
Answering your questions more specifically...
Which version/build numbers are required to be incremented when a new version of the app is uploaded to the app store?
Both. One is displayed in the App Store, the other is used by iTunes to update the App.
Can either CFBundleShortVersionString or CFBundleVersion remain the same between app updates?
No. (Meta question, what would the use case be here? If you've edited the payload in any way, the build will be different, and the user will want to know about it). If you try, you'll see error messages like below:

Or are they compared to the previous respective number to ensure that a numerically greater number is uploaded with the new version of the app?
Yes. Using the semver.org standard.
Are the CFBundleShortVersionString and CFBundleVersion numbers in any way compared to each other?
No.