STM32F4xx input pin reads wrong state on first run but not subsequent
So it turns out this was a simple copy paste error on my part which, due to similarly named macros in adjacent functions, my eyes glassed over. I was initializing one port, while reading another. My function above should have read:

void BSP_InitializeMode(void) {
    /*Configure MODE signal line */
    GPIO_InitTypeDef GPIO_InitStruct;
    DEVICE_HOST_MODE_CLK_ENABLE();
    GPIO_InitStruct.Pin = DEVICE_HOST_MODE_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
    HAL_GPIO_Init(DEVICE_HOST_MODE_PORT, &amp;GPIO_InitStruct);
    GPIO_PinState state = HAL_GPIO_ReadPin(DEVICE_HOST_MODE_PORT, DEVICE_HOST_MODE_PIN);
    isDevice = (state == GPIO_PIN_RESET);
}