How can I get the materials used in an array's caps to be properly assigned?
I took a look at your blend. 

It seems that the order of materials matters when using the start/end caps in an array modifier (maybe because of material ID's!?). Not sure why it works this way or if its a bug. 

Notice on my RGB pic of materials the colors match the slot number on all objects. 

However in yours, the metal brush and mirror are swapped. I guess this "swap" does not carry over in the caps of the array modifier. 

So just make sure all the objects have the same material on the same slot number.