The roots are the key difference. The second polynomial has a rational root, -1, meaning it can be split out in a partial fraction decomposition. If you don't call evalf() on the roots you can also see that the roots of the first polynomial are more complicated, because they are coming from the general cubic formula. You can also see the difference in the two if you call factor().
>>> factor(s**3+s**2+5*s+4)
s**3 + s**2 + 5*s + 4
>>> factor(s**3+2*s**2+5*s+4)
(s + 1)*(s**2 + s + 4)
The first polynomial is irreducible over rationals, but the second factors. So if you do a partial fraction decomposition, it will not split because apart() only decomposes over rational numbers by default. If you want a full decomposition over all the roots, you can use something like apart(1/(s**3+s**2+5*s+4), full=True).doit().
Note that it's not uncommon for polynomials to work like this, where if you change a coefficient it changes the behavior of it. That's because it's easy for a polynomial to have a rational root with one coefficient but not with another close coefficient, like in this case.
Aaron Meurer