If you’re running WordPress on IIS7 (sacrilege, I know) and you try to include uploaded images in your blog posts, you will probably encounter this error. The cause, as detailed here and here, is a permissions problem. When you upload files using PHP they are placed into a temporary directory, from where they are moved by WordPress into its own upload directory. The problem is that file permissions are not inherited from the upload directory when the system moves the file there.
The solution, also detailed in the links above, is to modify the security settings on the temporary upload directory (which is specified in PHP.ini) to give appropriate permissions to the account serving your WordPress site. If your application pool identity for your WordPress site is Network Service, that means giving modify permissions to IUSR for the temporary upload directory.
A great tool to diagnose permissions and all sorts of other issues, by the way, is Process Monitor. If you’re familiar with PsExec and the like, you will probably know about procmon already. If not, this is another great tool from the Sysinternals suite which you should definitely try out.