Three of the properties are simple text strings. The fourth is a ProgressBar.
Huh? How can a ProgressBar be a property?

Firstly, can/should dictionaries be bound to DataRepeaters?
Well, you've done the experiments. You tell us! The question I'm asking myself however, is why you're using a dictionary at all. It appears that you need nothing more or less than a List(Of DeviceUnderTest) and that definitely can be bound to a DataRepeater (or any other binding capable control).

Secondly, if a dictionary is bound to a GUI control will accessing the properties of one of the dictionary's values require invocation? i.e. will the dictionary be tied to the GUI thread?
This really doesn't make any sense, even as a question. Invocation applies to controls on the UI thread. Since neither the Dictionary nor the Object in question appear to be controls, I have no idea how it could possible apply.

Thirdly, and most importantly, how should the view be updated when an object is added or removed from the dictionary? From my exceedingly limited understanding of binding, this should happen automatically, yet in my trials so far it is not.
There's binding and then there's binding. Not all bindings auto-update but I confess it's so long since I even looked at the DataRepeater that I can't tell you whether this is one of them (I might have a play in a minute). I suspect that you have other issues to sort out before you worry about that though.