Caster Semenya missed out on 800m gold at London 2012 as Russia's Mariya Savinova added the Olympic title to her World Championships crown.
The 21-year-old South African, who qualified fastest for the final, made a late charge for silver but appeared to be running within herself.
Semenya's form has been mixed since returning from an 11-month suspension that followed her 2009 World Championships win. She was sidelined while athletics bosses carried out gender tests.
Defending champion Pamela Jelimo of Kenya finished fourth as Russia's Ekaterina Poistogova took bronze.
Jelimo triumphed at the 2008 Games in Beijing as an 18-year-old, but the subsequent three years were disrupted by injuries and a loss of form.
The Kenyan managed to win gold at the World Indoor Championships in March and was in possession of the two fastest times of the year until Saturday's race.
She broke clear of the field with 300m to go, only for Savinova to reel her in and cross the line in 1:56.19 - the fastest 800m in 2012.
Semenya sat at the back of the pack for the first 400m and waited until the final bend to make a significant move.
Despite cruising past most of her rivals, she could not catch Savinova, although it did appear she had more left in the tank.
Semenya said she would target gold at the 2016 Games in Rio de Janeiro.
"I've had some good training," she said. "I've been waiting all year for this. The last four years have not been easy. I'm already thinking about Rio and I hope I'll be there.
"The body was not really on fire today and I had to fight to the end.
"The race was very fast. It doesn't matter if you are at the back or the front, it matters how you finish the race."
Despite her disappointment, Semenya's silver was South Africa's first Olympic medal in a women's track event since Elana Meyer's silver in the 10,000m at the 1992 Games in Barcelona.