In VS, F5 will launch your application under the debugger. Under the debugger, you'll hit breakpoints, be able to edit-and-continue, and do all the debugger things you know and love.

Ctrl+F5 will launch your application outside of the debugger. This is like launching your app from the "start | run" menu, except VS becomes the parent process instead of explorer. Ctrl+F5 is purely convenience functionality.
Ideally , running under a debugger shouldn't change the app's behavior. An app may do something evil, like detect if a debugger is attached to itself, and use that to do different behavior.

Under the covers, they both translate to calls to CreateProcess. The questions are:
1) what version of CreateProcess do you call? kernel32!CreateProcess is the OS API to create a process. ICorDebug::CreateProcess has the same signature as kernel32's, but the ICorDebug version will launch the program as a managed debuggee.
2) what flags do you pass? CreateProcess takes a set of flags. If you pass (DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS) to the flags, then the child process will be a native.
If you enable both managed + native debugging, then you've enabled interop-debugging.

Here's a matrix:

  F5 (under debugger) Ctrl+F5 (outside debugger)
Managed-only ICorDebug::CreateProcess,
0 flags
kernel32!CreateProcess,
0 flags
Native-only kernel32!kernel32!CreateProcess, 
DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS
kernel32!CreateProcess,
0 flags
Interop (aka Mixed-mode) ICorDebug::CreateProcess,
DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS
kernel32!CreateProcess,
0 flags