It's explained in the docs in general, but I'll try to get a bit deeper.
Protractor has two modes for debugging: DebuggerRepl and CommandRepl.
Also checkout:https://github.com/prabhpreetk/protractor.git
Repl here stands for Read-eval-print-loop which usually means that whatever command you type in, it gets evaluated right away in the current context and you are provided with a result immediately. For example, the console in Chrome Developer Tools is kinda a REPL for Chrome's implementation of JavaScript/DOM, or when you run node in the terminal, you get a REPL for Node.js's JavaScript context - you can type commands and get the result.
When you use the browser.pause() you are activating DebuggerRepl. It brings you a Repl where you can execute commands of this mode. You usually see this list of commands in the terminal:
press c to continue to the next webdriver command
Press d to continue to the next debugger statement
type "repl" to enter interactive mode
type "exit" to break out of the interactive mode
press ^C to exit
So you can go to the next WebDriver command using c command or jump to the next browser.pause() statement in your test using d command. They are executed right away as you use them. So this mode basically allows you to jump over page states and explore the result. (Note: this mode provides more commands; they do work, but I'm not sure what is the meaning of their output and if they are useful for a Protractor user at all.)
When you use the browser.enterRepl() you are activating CommandRepl mode. It allows you to use Protractor methods which you would use in tests but in an interactive mode. You get access to element, browser and protractor objects, so you could run for example:
> $('.hello').getText();
> 'World'
It prints you back the result immediately, so it's sort of a sandbox where you can query the DOM on the current page state and see the results.
As you may have noticed, the browser.pause() list of commands has a line:
type "repl" to enter interactive mode
It means that when you are in DebuggerRepl mode, you can execute the repl command to activate CommandRepl mode for the current page state where you've just run browser.pause(), so you can play with DOM as if you've just used browser.enterRepl(). You can go back to DebuggerRepl mode using the exit command. But if you've entered into CommandRepl mode using browser.enterRepl(), you can't switch to DebuggerRepl mode.
Also, CommandRepl mode can be activated with a feature called elementExplorer. It can be used without any written tests; it just opens a URL in CommandRepl mode.
tl;dr
To summarize, I believe that they are supposed to be used according to how they are called.
browser.pause() - I want a browser to pause exactly in that place so I can see what's happening on the page. Then, on my command, I want it to jump to the next state so I can see what is happening here. If I need more information for the current state, I can run repl and use the Protractor API (browser, element, protractor) to investigate. I can then exit this mode and continue jumping through states.
browser.enterRepl() - I want a browser to pause exactly in that place and let me investigate a page using the Protractor API (browser, element, protractor) right away, and I don't need to be able to jump between states of the page.