Sorry but I don't agree.
From the canvas widget spec:
[..] pathName moveto tagOrId xPos yPos
Move the items given by tagOrId in the canvas coordinate space so that the first coordinate pair of the bottommost item with tag tagOrId is located at position (xPos,yPos). xPos and yPos may be the empty string, in which case the corresponding coordinate will be unchanged. All items matching tagOrId remain in the same positions relative to each other. This command returns an empty string.
With other words, "moveto" has nothing to do with the item's border thickness or the bbox, just with the position of item as returned by the "coords" method.
As my little code snippet demonstrated, when I "moveto" a RECT to (100,100) the "first coordinate pair of the bottommost item"
it's not moved to (100,100) but it's moved to (101,101) !
I think that I should open a BUG.