I'd personally use a Regex match:
GCI $path | ?{$_.Name -match "(?:.*?{)(.*?)(?:})(\..*)?$"}|%{$_.MoveTo("$($_.Directory)\$($matches[1])$($matches[2])")}
Edit: As Adi Inbar says, I have created an overly complicated RegEx pattern. Simplified as he suggested (though still allowing for extensions) is a revised answer:
GCI $path | ?{$_.BaseName -match "{(.*?)}$"}|%{$_.MoveTo("$($_.Directory)\$($matches[1])$($_.Extension)")}
Edit: Ok, here's the breakdown...
GCI is short for Get-ChildItem, it pulls a listing of the directory specified, but I think you probably figured that one out.
Then it pipes to a Where{} clause(? is an alias for Where). It matches the BaseName of the files and folders provided by the GCI command. The BaseName property is actually one generated by PowerShell that takes the name of the file, extension and all, and then removes the extension (with preceding period) from it so if the file name is Sample.txt then it provides you with Sample as the BaseName.
It matches that against a RegEx (short for Regular Expression) pattern. If you don't know what RegEx is, please feel free to look it up and read up on it (Google is your friend). The basics is that it matches a pattern instead of actual text. In this case the pattern is anything at the end of the file name that is between curly braces.
Past that it enters a ForEach loop (I used the % alias for ForEach). For each file that matched the RegEx pattern it performs the MoveTo() method for that file. The location that it is moving it to is that file's current directory (gotten with $.Directory), followed by a backslash, followed by $Matches[1] (I'll get to that in a second), and then the original extension of the file (gotten with $.Extension). Now you'll see I wrapped the Directory and Extension in a sub-expression $() because with string extrapolation (how it auto-magically expands variables if you put them within double quotes) if you try to specify a property of a variable you have to put it in a sub-expression. Otherwise it tries to expand just the variable itself, and shows the .Whatever property name in plain text.
Lastly, $Matches is an automatic variable that is populated when you make a match with a few things (such as <something> -match <something else> like we did in the Where clause). The first record of it is the whole string that was matched <something>, and then the next records are the matches based on <something else>.
I hope that clears it all up for you. If you have specific questions let me know. If this answer resolved your question please mark it as accepted.