If you actually want to find the last "-" and adjust according to that, rather than finding the "second occurrence", as you have tried to do, you might find it easier to use REVERSE on the String and then find the first "-" in that reversed-string.
Just a different way. Don't know if it'll be faster or slower (probably slower but allows the parts to be different length, especially that first part) and it will only work if you have at least the right 3 parts (in this case).
SELECT Original = s.Item
,Reformed = '300-'+LEFT(PARSENAME(ca.Item,3),2)+PARSENAME(ca.Item,2)
FROM #s s
CROSS APPLY (SELECT REPLACE(s.Item,'-','.')) ca (Item)
;
If you actually want to parse the numeric part of the first part, that'll take just a bit more.
That has one more dash in it than your original post. You could either STUFF out the extra dash or do a replace. Keep in mind that it also requires the first and second segment to both be precisely 4 characters at all times. If there's a guarantee of that, the a direct formula as you have would be the best for performance but is there a "forever" guarantee on the structure?