I found a solution in the meanwhile. 
At first it looked like the hub itself (Anker / Ugreen) was at fault, but testing showed that the issue only happened if my Eizo monitor with its integrated USB HID control was connected. With the hub alone (no monitors or keyboard/mouse attached), shutdown was clean.
Root Cause
The Eizo monitor exposes itself as a USB HID device (056d:0002 HID Monitor Controls) and advertise USB Remote Wakeup capability.
This caused Linux to leave the HID device “active” during poweroff.
As a result, the kernel hung for ~1 min or completely froze instead of shutting down.
Solution
The fix is to disable USB remote wakeup for the monitor HID devices at boot time.
Manual test
Run this once and then try shutting down:
for dev in /sys/bus/usb/devices/*; do
if [ -f "$dev/idVendor" ] && [ -f "$dev/idProduct" ]; then
if grep -q 056d "$dev/idVendor" && grep -q 0002 "$dev/idProduct"; then
echo disabled | sudo tee "$dev/power/wakeup"
fi
fi
done
If shutdown works normally after this, the issue is confirmed.
Permanent fix with systemd
[Unit]
Description=Disable monitor HID Remote Wakeup
DefaultDependencies=no
Before=shutdown.target poweroff.target reboot.target suspend.target hibernate.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c '\
for dev in /sys/bus/usb/devices/*; do \
if [ -f "$dev/idVendor" ] && [ -f "$dev/idProduct" ]; then \
# Replace 056d/0002 with your monitor’s vendor/product IDs
if grep -q 056d "$dev/idVendor" && grep -q 0002 "$dev/idProduct"; then \
echo disabled > "$dev/power/wakeup"; \
fi; \
fi; \
done'
[Install]
WantedBy=multi-user.target
Then enable it:
sudo systemctl daemon-reexec
sudo systemctl enable disable-monitor-wakeup.service
sudo systemctl start disable-monitor-wakeup.service
How to adapt this for other monitors/devices
Run lsusb with your hub/monitors connected.
Identify the Vendor ID (idVendor) and Product ID (idProduct) of the suspicious HID device (often the monitor HID controls).
Replace 056d and 0002 in the script with your IDs.
Test again with the manual loop.
After applying this fix, my Framework laptop now shuts down cleanly with both monitors, keyboard, and mouse connected. Maybe this is helpful for others of you with the same trouble.