The avps are not single value variables, but a linked list. Practically it adds to the list whenever there is an assignment (in config or inside a function). It requires to empty the list yourself in the config if you expect some operations to add there and you don't want old values to remain.
In many cases I use avp_db_query() to load from different tables and store in same avp name.
So it is not a bug, but a design decision. If you want to discuss more, this should be dine on sr-users mailing lists to get more opinions...