Here's a couple things I look for when resigning players with multiple years left.
1.) Check to see if the player is trending up or down. Those trending up, resign them early. Their rating will be higher next year (probably) and you can get them cheaper this season. Those trending down, I will wait until the last season, as they may be cheaper after their ratings fall more.
2.) When I have low cap room, I will try and resign a player (early in the season), with multiple years left, in hopes of saving money for the current season. Some players in year 2-4 especially, you can save a bunch by resigning them early. When signing, check to see if you're saving money before clicking save. If your wrong, you won't have any cap left!