The solution is to change to the top pad before drawing the legend:
rp.GetUpperPad().cd();
legend.Draw()
As for the different histogram styles, that’s just because the TRatioPlot does that by default (usually people want error bars only for the second histogram). For the first histogram, the default drawing option is "hist", and for the second one it’s "E". But as you already noticed, you can change the style to what you like with SetH1DrawOpt() and SetH2DrawOpt().
Note that “SAME” is not a drawing option for TLegend. Basically TLegend::Draw() does not use the option parameter. so it is enough to do the following: