Harrison (13-6) worked around eight hits and three walks, limiting the Royals to two runs over 6 2/3 innings, and breaking a personal two-start losing streak.
Tanner Scheppers quelled a seventh-inning Royals rally and Alexi Ogando corralled his second save with a 1-2-3 ninth for American League West-leading Texas, which took the opener of a three-game series.
The Rangers were clinging to a 2-1 lead in the seventh when Moreland unloaded his three-run bomb, breaking the game open.
Kansas City starter Jeremy Guthrie (0-3) took the loss, yielding three runs on six hits in a six-inning effort.
Alcides Escobar and Yuniesky Betancourt drove in runs for the Royals.