Add Join can be a challenge in Model Builder because you need to explicitly remove the join before you run it again or it gets confused.
I'm with Xander, I'd simplify things by copying the output of select layer by location with Copy Features to a temp dataset (in in_memory if not too big) and use Join Field to add the data directly from the output from Excel To Table. Oh, and I'd run Excel To Table to a geodatabase temp table instead of a dbf. (No need to make an XY event layer if you are just going to add the fields to another table which already has locations.)
Joins work better when both tables have an ObjectID field, external data sources like .xlsx and .dbf do not have objectID fields, so joins won't have as much functionality (and run slower). Best to import the data to Esri world (in_memory, temp geodatabase table) before doing joins, so you get the benefit of the OID field.