Hamilton, who has had a disappointing season since signing a free-agent contract with the Angels, hit just his 17th homer of the campaign to key the big inning. He had 43 home runs with Texas last year.
His long ball came after Mark Trumbo had singled in two runs earlier in the first, during which Los Angeles delivered five of its seven hits. The Angels went on to end a four-game losing streak.
Jered Weaver (7-5) worked seven innings to get the victory, surrendering two runs on six hits with no walks and four strikeouts. Dane De La Rosa walked one in the ninth while picking up his first save.
De La Rosa was given an opportunity to close out the game after closer Ernesto Frieri blew two save chances in a row.
Cleveland endured its fifth straight loss, having just been swept in a four-game series by Detroit.