First, under Labor Code 2922, an employer can terminate an employer "at will," unless there is a written contract with a specific termination date. So, if your son's old contract is expired, then the employer can terminate him, at any time, for any reason, or for no reason at all -- and there's nothing your son can do to prevent this.
However, when someone works for a staffing agency, the primary contractor (the organization for which your son actually works) really holds all the cards, because if it wants your son, the staffing agency is not going to fire him, because he is the money stream, and without him, there's no money for the staffing company.
Moreover, unless the staffing company maintains a fixed-term employment contract with your son, then the primary employer can hire your son, regardless of any contractual agreement not to do so. See Reeves v. Hanlon (2004) 33 Cal.4th 1140, 1148.
In my view, it seems as though the staffing company is shooting itself in the foot.
I can't tell your son what to do, but if he is really a highly sought after employee then the prime contractor will hire him directly (assuming that the staffing company fires him) -- and if not, then I doubt your son will have much difficulty finding new employment.
Hope this helps.
NOTICE: My goal here is to educate others about the law. I am always available to answer your follow-up questions after you click Accept – however, if you do not click Accept, the website gets paid, and I receive nothing. This is true, even if you are on a subscription plan. So please click Accept, so that I will be able to continue to provide this service for others in the future.
And, if you need to contact me again, please put my user id on the title line of your question (“To Socrateaser”), and the system will send me an alert. Thanks!