Turns out to be a case of garbage in garbage out.
The varchar @p_1 parameter being passed to the sp from the .net app was coming from a String type variable. This variable was defined as having a length of 20, as this is the defined length of the source where this variable is read from. In practice though, the length of the desired string (in terms of non-whitespace and non-null characters) is shorter than 20. but the full string, null characters and all, was getting passed to the sp, which was the reason for the padding.
Not finding a way to directly specify or re-dimension the length of a string type in .net, I added a quick loop to trim the string, and problem solved.
Tough one to find though, because looking at the value of the string in Visual Studio you see the string you want (without the non-printing characters displayed), so it isn't immediately apparent that the actual string is longer. It didn't click until I looked at the .Len property and saw a value of 20.