If you're using the Duration field for a song to determine when the song is finished and the next song is selected, that duration is counted from when the song is selected. I think you're saying that the song is 3 minutes long but you're setting the duration to 2 minutes because you only want the click to last for 2 minutes. In that case, the next song would be selected 1 minute before the current song is actually finished, so yes, the completion timer for the next song would start 1 minute too soon.
In this case you're using the song duration to stop the tempo, which is not how it was designed to be used. You can use it in this way, but you can't simultaneously use it in the way that it was designed to be used, as an indicator of how long a song is actually played for.
The "official" function for what you want to do is the Settings > Tempo & Pitch > Tempo Options > Auto-Stop Time setting. However, this is global for all songs; you can't set a different auto-stop time for each song.
If you need a different auto-stop time for each song, you can do what you're doing above, but then you should select the next song manually when you are ready to start playing it, rather than using the song completion action. If you are manually starting the tempo for each song when you are ready to start playing it, I think you could just as easily manually select the song, and let the app start the tempo for you at that point using a song selection action.
One more option would be to record an automation track for each song that starts the tempo and then stops it after the desired timeout for that song. Then you could set the song durations to the real durations, and use song completion actions to change songs after their real completion time, then start the tempo by starting the automation track, and let the automation track stop the tempo.