"I am eight years old."
Translation:Yo tengo ocho años.
Because in Spanish, you say "I have __ years." when you talk about how old you are. It's just a difference in phrasing between the two languages.
Because soy is a permanent quality. You are only a certain age for 1 year.
To understand why you say "tengo tres años" you need to know that cumpleaños means completed years. Thus you have (completed) three years.
And cumpleaños translates as birthday. So I believe MagneTufte is saying the Spanish meaning is that, on reaching your third birthday, you have three years completed.