Change the grid type. You have options like no snapping, local, global and middle block.
I believe the default (local) aligns itself on the center of the face for the block you are placing on. So if you place on a face with of 0.5x0.5, then the center is at 0.25x0.25. This is how you are getting half a block off.
If you do "global grid", it will behave more how you expect I think.
The middle block option that I can tell ignores the grid altogether, instead places things at increments based on the size of the root block. But I still don't fully understand if this is what is happening.
No snapping lets you place anything anywhere, but it'll be hard to line things up.
So basically, always use global and you'll should be good.