The union or join is probably being messed up with the fact that the 2 surfaces are "Barley touching" along the edges.
A solution would be to take say the bottom piece and make it "Bigger" so the edges stick through the top surfaces edges, then your Booleans should work.
[EDIT]Bad solution.[EDIT]
|