I think I came up with something that will work.
My approach was very similar, except I did not try to find the Nth pair of <Value> and </Value>. Instead, I found the NEXT <Value> and </Value> pair, appearing after the custom field's name in the string.
I used the SEARCH function's optional third argument, [start_num], to begin searching for "<Value>" part-way through the string. This skips any instances of "<Value>" and "</Value>" related to other custom fields, that are closer to the beginning of the string. From there, I plugged the positions into the MID function to retrieve the data.
I was able to use the same formula across B6:F32, to fill in the data for the 5 fields. The formula is fairly difficult to parse, so I added a walkthrough (highlighted yellow), which describes the "helper columns" I used to arrive at the final formula.
I hope this helps!