A team can NOT keep a player for more than one year.
A team can NOT keep a player which was traded away; the player must be on the team's final roster.
A team can NOT keep a player which was added during the course of the season; the player must have been drafted by THAT team in order to be kept.
A team can NOT keep a player who was drafted in rounds 4-6 if that player finished the season as the highest scoring player among his position.
***
Any team choosing to keep a player will forfeit a draft pick two rounds higher than the round that player was drafted the year before, i.e. If a team decides to keep a player drafted in the 6th round of last year's draft, it must forfeit it's 4th round pick in this year's draft.
Teams are not bound to keeping a player. If no player is kept, the team will pick in order with no picks forfeited.