Like all Unix-like systems, Linux stores file timestamps internally in UTC and when you get the directory listing, the timestamps are converted to whatever is the selected timezone of your session.
If either the camera or your Linux system has incorrect timezone settings, errors like this might happen. The camera clearly had correct local time, but may have converted it to UTC incorrectly, causing incorrect timestamps; or your laptop is using a different timezone than what you expect, causing errors to the UTC -> local time conversion.
date; date -u on your laptop. It will display two timestamps: local time and UTC time. If local time is correct but UTC is wrong, you have a wrong timezone and your laptop's system clock has incorrect UTC time.
If you are looking something like a memory card taken from the camera, you might want to use a mount option to specify the timezone the camera uses: on VFAT/FAT32/exFAT filesystems, Linux assumes that the filesystem timestamps are stored using local time by default.
The mount option
tz=UTC will assume the camera uses raw UTC on its filesystem rather than any local time, or
time_offset=<minutes> can be used to explicitly specify the time offset, if the camera uses something non-UTC that is different from what your laptop uses.