From the docs, a CanvasItem is:
<blockquote>
Base class of anything 2D. Canvas items are laid out in a tree and children inherit and extend the transform of their parent. CanvasItem is extended by Control, for anything GUI related, and by Node2D for anything 2D engine related.
Any CanvasItem can draw.
</blockquote>
So, you can draw on a CanvasItem or anything 'derived' from it.
A Node2D is
<blockquote>
A 2D game object, with a position, rotation and scale.
</blockquote>
So it basically represents a 2D point or position. You can attach (i.e. AddChild), e.g. a Sprite to it, so the Sprite then will be positioned at the x,y point of it's parent Node2D. The Sprite itself has a certain size, not the Node2D. The Node2D also has a scale value that will alter the size of it's child objects like the Sprite.
I'm not sure about your questions about bounds, etc. but it does get pretty complicated with position, scale, offsets, etc.
There's also local vs global position. Global position is basically relative to the root node of a scene, and local is from a node's parent.
Did you work out your questions in the end?