Disable Parallel Test vs. Always Run Asynchronously in Dev Console - Who wins?

I believe you're getting confused. Asynchronously has nothing to with parallelism. For the first box (Disable Parallel Testing), when checked, tests run one after another, and when unchecked, run several classes at a time.

The second box (Always Run Asynchronously) tells the Developer Console if it should run tests in the background or not. When checked, the test appears in the test panel and will be updated periodically as the test completes. When not checked, the "Run Test Synchronously" dialog will appear, blocking the IDE entirely until the test runs. You can observe the difference in behavior by running a test that is several seconds long with the box checked or not to see the difference.

As far as I know, there's no API to set if tests run in parallel or not, simply the Disable Parallel Testing checkbox in the UI. It is also explicitly overridden when running tests during deployment to production to avoid the UNABLE_TO_LOCK_ROW errors you've mentioned. The Developer Console will honor the Disable Parallel Testing checkbox regardless of the "Always Run Asynchronously" checkbox.