Wide table approach
It feels a bit kludgy and probably not terribly efficient but you could update all the columns in your update e.g.
UPDATE userkeywords SET key3=key2, key2=key1, key1=? where userid=?
From an efficiency standpoint, you might want to think about datatypes (might want to consider CHAR over VARCHAR because you can be certain rows will not need to be resized).
Multi-row Approach
You could simply issue an update on the oldest record in the table such as (I think this is the correct SQL server TOP syntax, but TSQL is my least-known dialect) :
update UserKeyWordsUsed set keyword=?
where userid=?
and CreatedOn = (SELECT TOP 1 CreatedOn
FROM UserKeyWordsUsed
WHERE userId= ?
ORDER BY CreatedOn);
In this case you would probably want to create your 10 records when you create the user or perform the preflight check before issuing updates.
You could also have a post-insert trigger delete the older record, but it seems like it would be simpler if you just handled via an update.
Depending on your usage, you could also move this to the application layer and have the DB just store a text representation of a token-separated keyword list.