When the container element's scroll position (vertical) is not zero, toElementCenter scrolls to an incorrect position. This is visible when you scroll to a certain element twice. The first time the containter scrolls so the element is in the center, the next time the container element is scrolled to the top (y < 0).
A little research showed that the current scroll position should be added to the equation:
to[axis] = scroll[axis] + position[axis] - (containerSize[axis] - size[axis]) / 2;
Fiddle showing problem and solution: http://jsfiddle.net/woomla/D2nJJ/8/
I always change the line you highlighted the same way you've done (adding scroll[axis])