Kipchoge, 25, who has run a world-best 12:51.21 this year, was perfectly placed in second at the bell behind Kipsiro and took the lead briefly with 300 metres to go.
But the Ugandan refused to give up and fought back as they came to the final bend neck and neck, ducking over the line (13:31.25 to 13:31.32) ahead of the Kenyan.
Kenyans Mark Kiptoo and Vincent Yator were third and fourth respectively in 13:32.58 and 13:37.02.
Kipsiro, 24, who was an agonising fourth over this distance at the 2008 Olympics, 2009 World Championships and 2010 African Championships, went through in the lead after the first lap before Rwanda's Sylvain Rukundo took over the pace.
"I wanted this badly, badly, badly and God has given me the gift," said an ecstatic Kipsiro.
"It was tactical race. Everyone was waiting for the final kick. I knew the Kenyans had a plan for me. "I wanted to conserve my energy for the last lap. I knew I had to be in front of the Kenyans with 400m to go and I surged at the 800m mark to put myself in a good position," he said.
"When I surged, I wanted the Kenyans to know that things would not be easy. Then I surged again with 500m remaining because I knew I had to be in front on the last lap.
"Kipchoge attacked me with 300m to go, 200m to go and again in the last 100m. I just didn't want him to pass me," Kipsiro explained his race tactics.