Sorry about the delay, I have been working on this, but it's a doozy, tied up with another issue I'm currently working on.
Hoping to have a fix soon.
NOTE TO SELF - issue is difference in the way data is stored in $_formData, for non-repeat joins. On normal display, non-repeat data is still an array, like ...
$this->_formData['join'[123]['table___element'][0]
But after a failed validation, the individual elements in the array are no longer arrays, they are just the element data itself. This is because in getData, if we are coming from a failed validation, we use setFormData(), which uses the request array, and non-repeat joins are therefore not arrays of form inputs, they are just single form inupts.
So when we hit reduceDataForXJoins(), everything goes to hell in a handbasket, as it's expecting all joined data to be arrays, like it is when rendering the form "normally", where the $_formData has been built by our table querying (rather than from posted data).
-- hugh