### Preflight Checklist

- [X] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/main/CONTRIBUTING.md) for this project.
- [X] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project adheres to.
- [X] I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a bug report that matches the one I want to file, without success.

### Electron Version

18.2.3 & 18.2.0

### What operating system are you using?

macOS

### Operating System Version

macOS Big Sur Version 11.6.4

### What arch are you using?

x64

### Last Known Working Electron version

_No response_

### Expected Behavior

In the normal mode, `browserWindow.getNormalBounds()` and `browserWindow.getBounds()` return the same bounds.
e.g. 
```
// In the normal mode...
getBounds { x: 389, y: 1429, width: 406, height: 1100 }
getNormalBounds { x: 389, y: 1429, width: 406, height: 1100 }
```

In the minimized mode, I expect that `browserWindow.getNormalBounds()` returns the same bounds on macOS.
```
// In the normal mode...
getNormalBounds { x: 389, y: 1429, width: 406, height: 1100 }
```

### Actual Behavior

In the minimized mode, `browserWindow.getNormalBounds()` returns different bounds:
```
// In the minimized mode...
getNormalBounds { x: 880, y: 420, width: 800, height: 600 }
// ^^^^ Different with { x: 389, y: 1429, width: 406, height: 1100 }
```

### Testcase Gist URL

https://gist.github.com/weilonge/b73c7aee8e211ec60910025273651b4d

NOTE: Using `setTimeout(..., 1000)` when handling `'show'` and `'minimize'` events is for waiting for the bounds settle down.

### Additional Information

**How to use the gist to reproduce the issue?**

1. Adjust the size and position for the newly opened window. e.g. x: 389, y: 1429, width: 406, height: 1100

2. Minimize the window. There should be `======= Minimize Event ========` logs for showing `getBounds` and `getNormalBounds` values.
```
======= Minimize Event ========
getBounds { x: 389, y: 1429, width: 406, height: 1100 }
getNormalBounds { x: 880, y: 420, width: 800, height: 600 }
```
The problematic part in the `Minimize Event` log is at `getNormalBounds { x: 880, y: 420, width: 800, height: 600 }` line.
My understanding is that the expected value is `{ x: 389, y: 1429, width: 406, height: 1100 }`.
(Probably `getBounds` is incorrect too?)

3. Restore the window. There should be `======= Show Event ========` logs for showing `getBounds` and `getNormalBounds` values.
```
======= Show Event ========
getBounds { x: 389, y: 1429, width: 406, height: 1100 }
getNormalBounds { x: 389, y: 1429, width: 406, height: 1100 }
```
The `Show Event` log looks good to me.
shell/browser/native_window_mac.h
void Restore() override;
  bool IsMinimized() override;
  void SetFullScreen(bool fullscreen) override;
  bool IsFullscreen() const override;
  void SetBounds(const gfx::Rect& bounds, bool animate = false) override;
  gfx::Rect GetBounds() override;
  bool IsNormal() override;
  gfx::Rect GetNormalBounds() override;
  void SetContentSizeConstraints(
      const extensions::SizeConstraints& size_constraints) override;
  void SetResizable(bool resizable) override;
  bool MoveAbove(const std::string& sourceId) override;
  void MoveTop() override;
  bool IsResizable() override;
  void SetMovable(bool movable) override;
  bool IsMovable() override;
  void SetMinimizable(bool minimizable) override;
  bool IsMinimizable() override;
  void SetMaximizable(bool maximizable) override;
  bool IsMaximizable() override;
  void SetFullScreenable(bool fullscreenable) override;
  bool IsFullScreenable() override;
  void SetClosable(bool closable) override;
  bool IsClosable() override;
  void SetAlwaysOnTop(ui::ZOrderLevel z_order,
                      const std::string& level,
                      int relative_level) override;
  std::string GetAlwaysOnTopLevel() override;
  ui::ZOrderLevel GetZOrderLevel() override;
  void Center() override;