this should default to the currently active monitor
Problem is: which is the "currently active monitor" if you have more than one? If you have two or more then that gets to be a muddled question, a secondary monitor isn't more or less "active" then the primary one, it is equally capable of displaying windows.
The heuristic that Winforms uses is "the monitor that displays the mouse cursor". The underlying call is:
Screen desktop = Screen.FromPoint(Control.MousePosition);
If you want to emulate the behavior that MessageBox.Show() uses to find an owner then write the code so it finds the currently active window. The underlying winapi call is GetActiveWindow(). Which ShowDialog() already uses so there is probably more going on than meets the eye, like an active window that is not a Winforms window. Which the native MessageBox() winapi function doesn't mind, but ShowDialog() does. Use Spy++ to diagnose this.