diff --git a/.github/workflows/release_wheel_creation.yml b/.github/workflows/release_wheel_creation.yml
index ecaf6afbd59..8af5bd93151 100644
--- a/.github/workflows/release_wheel_creation.yml
+++ b/.github/workflows/release_wheel_creation.yml
@@ -4,6 +4,8 @@ on:
   push:
     tags:
       - '*'
+  schedule:
+    - cron: '0 0 3 * *'
   workflow_dispatch:
     inputs:
       git-ref:
@@ -14,8 +16,11 @@ concurrency:
   group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
   cancel-in-progress: true
 
-jobs:
+defaults:
+  run:
+    shell: bash -l {0}
 
+jobs:
   native_wheels:
     name: Build wheels (${{ matrix.wheel-version }}) on ${{ matrix.os }} for native and cross-compiled architecture
     runs-on: ${{ matrix.os }}
@@ -46,6 +51,7 @@ jobs:
           TARGET: 'py313'
           GLOBAL_OPTIONS: "--without-cython --with-distributable-extensions"
 
+        # We use pure python for any Windows/python greater than 3.10
         exclude:
         - wheel-version: 'cp311*'
           os: windows-latest
@@ -56,8 +62,17 @@ jobs:
 
     steps:
       - uses: actions/checkout@v4
+      - name: Create pyproject.toml
+        run: |
+          # Per the cibuildwheel documentation, you can technically use
+          # CIBW_BEFORE_BUILD to do these steps; however, as of the newest
+          # version (2.21.3) this feature does not work. This is a hack
+          # to make cibuildwheel recognize our pre-build requirements
+          echo -e '[build-system]\n\nrequires = [ "setuptools", "wheel", "cython", "pybind11" ]' > $GITHUB_WORKSPACE/pyproject.toml
+          cat $GITHUB_WORKSPACE/pyproject.toml
+          ls -la $GITHUB_WORKSPACE
       - name: Build wheels
-        uses: pypa/cibuildwheel@v2.16.5
+        uses: pypa/cibuildwheel@v2.21.3
         with:
           output-dir: dist
         env:
@@ -67,7 +82,6 @@ jobs:
             CIBW_BUILD: ${{ matrix.wheel-version }}
             CIBW_SKIP: "*-musllinux*"
             CIBW_BUILD_VERBOSITY: 1
-            CIBW_BEFORE_BUILD: pip install cython pybind11
             CIBW_ENVIRONMENT: PYOMO_SETUP_ARGS="${{ matrix.GLOBAL_OPTIONS }}"
       - uses: actions/upload-artifact@v4
         with:
@@ -110,8 +124,17 @@ jobs:
         uses: docker/setup-qemu-action@v3
         with:
           platforms: all
+      - name: Create pyproject.toml
+        run: |
+          # Per the cibuildwheel documentation, you can technically use
+          # CIBW_BEFORE_BUILD to do these steps; however, as of the newest
+          # version (2.21.3) this feature does not work. This is a hack
+          # to make cibuildwheel recognize our pre-build requirements
+          echo -e '[build-system]\n\nrequires = [ "setuptools", "wheel", "cython", "pybind11" ]' > $GITHUB_WORKSPACE/pyproject.toml
+          cat $GITHUB_WORKSPACE/pyproject.toml
+          ls -la $GITHUB_WORKSPACE
       - name: Build wheels
-        uses: pypa/cibuildwheel@v2.16.5
+        uses: pypa/cibuildwheel@v2.21.3
         with:
           output-dir: dist
         env:
@@ -119,7 +142,6 @@ jobs:
             CIBW_BUILD: ${{ matrix.wheel-version }}
             CIBW_SKIP: "*-musllinux*"
             CIBW_BUILD_VERBOSITY: 1
-            CIBW_BEFORE_BUILD: pip install cython pybind11
             CIBW_ENVIRONMENT: PYOMO_SETUP_ARGS="${{ matrix.GLOBAL_OPTIONS }}"
       - uses: actions/upload-artifact@v4
         with:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c8392ac8106..b6b7652ec08 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -52,7 +52,7 @@ CHANGELOG
   - Remove Octeract from NEOS solvers list (and other testing fixes) (#3374)
   - Guard tests against broken Gurobi licenses (#3383)
   - Remove pin to Gurobi 10.0.3 (#3393)
-  - Add Python 3.13 to Testing Infrastructure (#3401)
+  - Add Python 3.13 to Testing Infrastructure (#3401, #3419)
   - Resolve `timeout()` failures on Windows/py3.13 (#3415)
 - GDP
   - Fix performance degradation in hull transformation (#3366)