Another issue I am thinking about is that C is not constant over time. You could assume that C= Yield which is probably about right for newly issued bonds but definitely would not be correct of a 10 year bond that is actually a 30 year bond issued 20 years ago.
I was thinking about it and I can't figure out a way to do this exactly. There are bond return indices out there but I assume that you want to go back far into the past and I doubt that these indices go back more than 40 years.
You should have the two components: coupon yield and capital appreciation
Coupon Yield = Coupon / Price, could be approximated with the Yield
Capital Appreciation = "Price of a 9 year bond at time t+1" / "Price of a 10 year bond at time t" - 1 is much harder to approximate because as mentionned, the yield curve is never flat and its shape never stays constant.
In conclusion, I think that your method is as good as you can get it. It likely understates return a little.
One way you could test my conclusion is to get the actual return over 1 year of actual 10 year bonds for the last years. You can find historical prices on a bloomberg machine if you can get help from someone that has access to one.