Welcome! Also, regarding the case of holding the title bar, if you are using the pygame.Clock() as your game timer, then you will always experience a time-skip everytime you drag/hold the title bar. This is due to the internal timer not stopping and your screen not updating, causing a gap in the time interval (ticks or time_delta) about the same length as the time you held the title bar.
If your sprite's update function depends on the number of ticks, then I suggest filtering out (or limiting it) on the part where you get the number of ticks. For example, let's say your timer is called "timer", then you can use:
time_delta = min(1/fps, timer.get_time()/1000)
as your game's time_delta, which will treat the time above the limit as redacted time/pause time and remove it from computation. This line will make is so that the update will only receive a maximum of 1/fps seconds of update time (btw, this is what I usually use to avoid over the top time updates). There are other, much advanced way of doing filtering and one of those is what you may need to "PAUSE" the game when dragging the window. Though I can't explain it here as that will be too long.
Hope this helps!
Edit: Sorry for the small mistake, it should be min and not max to filter out large deltas.