Specifically, get/set-content works with providers that facilitate content reading and writing. Out-File works only with the FileSystem provider and is for all intents and purposes an alias to the > redirection operator.
An interesting thing to note about get-content and set-content is that you use them indirectly every day. Both the variable and function providers support get- and set-content, and when you use the dollar ($) syntax to read or write to a variable, you are implictly calling get-content and set-content against a path in the variable provider. E.g.
ps> $foo = 5
...is the same as:
ps> ${variable:foo} = 5
e.g. set the content of item foo in the psdrive called "Variable" to 5. This is why you can also write to a file like:
ps> ${c:\temp\foo.txt} = "some content"
...and read it back with:
ps> ${c:\temp\foo.txt}
some content
Ultimately, when using the $ syntax, the "variable" drive is the default drive to read and write content from. Elegant, eh?