Views need to be refreshed if the underlying tables change at all. That can change the datatypes of the view's columns or rearrange its indexes. Therefore, it needs to know. Otherwise, you'd run a query against it, and it'd blow up pretty quickly.
You shouldn't have to run sp_refreshview
for altering a view. Only for altering its underlying tables.
Also, please do not taunt happy fun ball.
Edit: Just ran this code (in succession) to attempt to reproduce your problem. I was, unfortunately, unable to, as it worked as expected (SQL Server 2008):
create view MyView
as
select ProductKey, ProductID, ProductName, Price
from dbo.Products
select v.* from MyView v
alter view MyView
as
select ProductKey, ProductID, ProductName, Price*100 as MyPrice
from dbo. Products
select v.* from MyView v