stm32 CDC USB - Unknown device (error code 43)
One of typical mistakes in bus-powered USB devices is mismanagement of pull-up resistor. Your description says: " 1.5k pullup to 3.3", which means that the USB connect event (DP pullup) will be seen immediately upon plug in. So the host will start enumeration process in 100ms. Yet your MCU will take some time to boot, so it won't be ready with proper responses, and host inquiries will fail. By the time your MCU is ready to communicate, the host will declare the port as dead, and display error. When a demo board gets powered externally before connecting to USB host and is already up and running, the connection is fine.

To avoid this mishap, all reputable STM demo boards have the pull-up resistor controlled from GPIO pin, typically PB2 or PD2. Then the pull-up is set by code only when the USB stack is ready to respond.

The connection of ID pin on Micro-B receptacle on the USB device side is inconsequential, it is meant for USB OTG host, not for a plain device.