Ok, I think I have found it..
My explaination is likely horrible, but hopefully it makes sense.
The required / visible rules for the fields look something like TB_InstallsReq <= 15 && TB_InstallsReq >= 3
So that field is visible and required if the number of installs is needed is between 3 and 15.
The required / visibility rule calculations seem to differ in the different parts. While the request offering is being populated, the visibility / required rules seem to do an implicit conversion to a number for the value in TB_InstallsReq
In the item details / request parameters sections, this implicit conversion does not look to occur, meaning the fields are not visible IF the required installs is between 2 and 9. (More testing is needed)
So if I change the visibility rule to
number(TB_InstallsReq) <= 15 && number(TB_InstallsReq) >= 3
Everything works perfectly.
Explicitly casting all values to number also works, but possibly overkill.. maybe...
The fields were set to number type rather than alphanumeric.
What I think is happening is that the cast occurs from the form view, but not from the details view. The fix is easy enough, it's just that the behaviour is inconsistent.