When you call RenewLock it resets the time the message is locked by the LockDuration set on the Queue or Subscription the message is pulled from. If your class that is performing the renew has a timer that is firing every 10-15 seconds then the behavior you are seeing is correct.
Example:
I have a queue with a lock duration of 1 minute (the default).
I pull the message at 1:20 AM UTC, so the LockedUntilUtc should read 1:21 AM UTC.
If 10 seconds into the processing I call Renew lock the call fires at 1:20:10 AM, so the LockedUntilUtc would become 1:21.10 AM.
It added the lock duration value to the current time at the server, not to the previous LockedUntilUtc value. This extends your period of the lock on the message.
This answer assumes you are firing the trigger on the Timer often and not waiting to get close to the actual lock timeout. If you wanted to be more precise you could set the timer to fire about 10-20 seconds before the lock is set to expire and then do the renew lock.