1) This is normal. Shelve /move is implemented as regular Shelve + Undo. While it's always safe to clean uncontrolled files from your local disk after they're stored on the server, the call to Undo() doesn't know this, so it leaves pending adds behind like it always does. There have been feature suggestions since v1.0 to track this behavior more granularly so that files can be cleaned up when appropriate, and/or to use a platform specific "safe delete" (read: move to Recycle Bin if you're on Windows). But AFAIK none has been implemented to date.
2) The latest TFS Power Tools added a feature 'tfpt unshelve /undo' that handles this more intelligently. It's also trivial with a Powershell pipeline: tfshelve <parameters
> | tfundo | tfprop | del
Change to your project files shouldn't affect this behavior one way or another. Though if you do add the file to a project & fail to undo that edit, you'll see an orphan file reference in Solution Explorer.