Yeah, this is normal actually: if you have a floated whatever, and then a static block next to it, the static block is actually sliding under the floating whatever, as if the float weren't there at all!
You can see this if you give the static block a background colour.
Internet Explorer does not do this IF the static block has Haslayout triggered on it (if the static block was given a height or a width usually, tho there are other triggers). Then it incorrectly treats the static block like another float! And its left side will be right up against the float instead of up against the left side of the container. You can see this on the floaties pages, if you look in a modern browser and then IE6 or 7.
The inline content of the static block gets out of the way though. Inlines can see floats. If the float has the margin, then it should be able to push the text over further.
But more importantly, your code is invalid.
An image is an inline and may not be a direct child of the body (body is one of those blocks who need their direct children to also be blocks).
So you can solve two problems in one by putting the img inside the div.
<p>Textitty text text text.</p>
and then again you'd want to put the margins on the image. Though top margins might collapse, making them look like you've put a top margin on the div itself; if so, use top-padding on the div instead of top margins on the image (assuming you want a nice amount of space all the way around the image, not just its right side).
I can't remember but I've also run into an instance where margins on the image still didn't work, and I keep forgetting how I got them to work.