So, I fiddled enough with the code that I think I found a solution that solves almost all the problems mentioned in the question. 

Here is the code behind the form:

    Private Sub Form_Load()
        'When the form loads, we need to find the relative position of each control
        'and save it in the control's "Tag" property so the resize event can use it.

        'Call the SaveControlPositionsToTags  sub and pass this form as an argument
        SaveControlPositionsToTags Me
    End Sub
    
    Private Sub Form_Resize()
        'Set the height of the header and footer before calling RepositionControls
        'since it caused problems changing their heights from inside that sub
        Const HEADER_HEIGHT_PERCENTAGE = 0.1
        Const FOOTER_HEIGHT_PERCENTAGE = 0.1
        Me.Section(acHeader).Height = Me.WindowHeight * HEADER_HEIGHT_PERCENTAGE
        Me.Section(acFooter).Height = Me.WindowHeight * FOOTER_HEIGHT_PERCENTAGE
        
        'Call the RepositionControls Sub and pass this form as an argument
        RepositionControls Me
        
    End Sub

And here is the code that can be placed in a standard module:

    Public Enum ControlTag
        FromLeft = 0
        FromTop
        ControlWidth
        ControlHeight
        OriginalFontSize
        OriginalControlHeight
    End Enum
    
    Public Sub SaveControlPositionsToTags(frm As Form)
    On Error Resume Next
    
        Dim ctl As Control
    
        Dim ctlLeft As String
        Dim ctlTop As String
        Dim ctlWidth As String
        Dim ctlHeight As String
        Dim ctlOriginalFontSize As String
        Dim ctlOriginalControlHeight As String
        
        For Each ctl In frm.Controls
        
            'Find the relative position of this control in design view
            'e.g.- This control is 5% from the left, 10% from the top, etc.
            'Those percentages can then be saved in the Tag property for this control
            'and used later in the form's resize event
            ctlLeft = CStr(Round(ctl.Left / frm.Width, 2))
            ctlTop = CStr(Round(ctl.Top / frm.Section(ctl.Section).Height, 2))
            ctlWidth = CStr(Round(ctl.Width / frm.Width, 2))
            ctlHeight = CStr(Round(ctl.Height / frm.Section(ctl.Section).Height, 2))
            
            'If this control has a FontSize property, then capture the
            'control's original font size and the control's original height from design-time
            'These will be used later to calculate what the font size should be when the form is resized
            Select Case ctl.ControlType
                Case acLabel, acCommandButton, acTextBox, acComboBox, acListBox, acTabCtl, acToggleButton
                    ctlOriginalFontSize = ctl.FontSize
                    ctlOriginalControlHeight = ctl.Height
            End Select
            
            'Add all this data to the Tag property of the current control, separated by colons
            ctl.Tag = ctlLeft & ":" & ctlTop & ":" & ctlWidth & ":" & ctlHeight & ":" & ctlOriginalFontSize & ":" & ctlOriginalControlHeight
            
        Next
    
    End Sub
    
    Public Sub RepositionControls(frm As Form)
    On Error Resume Next
    
        Dim formDetailHeight As Long
        Dim tagArray() As String
        
        'Since "Form.Section(acDetail).Height" usually returns the same value (unless the detail section is tiny)
        'go ahead and calculate the detail section height ourselves and store it in a variable
        formDetailHeight = frm.WindowHeight - frm.Section(acHeader).Height - frm.Section(acFooter).Height
    
        Dim ctl As Control
        
        'Loop through all the controls on the form
        For Each ctl In frm.Controls
        
            'An extra (probably unncessary) check to make sure the Tag property has a value
            If ctl.Tag <> "" Then
            
                'Split the Tag property into an array
                tagArray = Split(ctl.Tag, ":")
                
                If ctl.Section = acDetail Then
                    'This is the Detail section of the form so use our "formDetailHeight" variable from above
                    ctl.Move frm.WindowWidth * (CDbl(tagArray(ControlTag.FromLeft))), _
                                       formDetailHeight * (CDbl(tagArray(ControlTag.FromTop))), _
                                       frm.WindowWidth * (CDbl(tagArray(ControlTag.ControlWidth))), _
                                       formDetailHeight * (CDbl(tagArray(ControlTag.ControlHeight)))
                Else
                    ctl.Move frm.WindowWidth * (CDbl(tagArray(ControlTag.FromLeft))), _
                                       frm.Section(ctl.Section).Height * (CDbl(tagArray(ControlTag.FromTop))), _
                                       frm.WindowWidth * (CDbl(tagArray(ControlTag.ControlWidth))), _
                                       frm.Section(ctl.Section).Height * (CDbl(tagArray(ControlTag.ControlHeight)))
                End If
                                   
                'Now we need to change the font sizes on the controls.
                'If this control has a FontSize property, then find the ratio of
                'the current height of the control to the form-load height of the control.
                'So if form-load height was 1000 (twips) and the current height is 500 (twips)
                'then we multiply the original font size * (500/1000), or 50%
                Select Case ctl.ControlType
                    Case acLabel, acCommandButton, acTextBox, acComboBox, acListBox, acTabCtl, acToggleButton
                        ctl.FontSize = Round(CDbl(tagArray(ControlTag.OriginalFontSize)) * CDbl(ctl.Height / tagArray(ControlTag.OriginalControlHeight)))
                End Select
                
            End If
            
        Next
        
    End Sub