I feel a bit stupid now because I thought I’d tried every combination of options in config.txt. Setting the framebuffer width and height seemed to solve the problem, I’m not sure why but I’m just happy it works!
I came across a post somewhere where someone had the same problem with this exact monitor so if in case anyone else finds this post looking for the same thing I’ll post my config below.
# uncomment if you get no picture on HDMI for a default "safe" mode hdmi_safe=1 # uncomment this if your display has a black border of unused pixels visible # and your display can output without overscan #disable_overscan=1 # uncomment the following to adjust overscan. Use positive numbers if console # goes off screen, and negative if there is too much border #overscan_left=16 #overscan_right=16 #overscan_top=16 #overscan_bottom=16 # uncomment to force a console size. By default it will be display's size minus # overscan. framebuffer_width=640 framebuffer_height=480 # uncomment if hdmi display is not detected and composite is being output hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=1 hdmi_mode=1 # uncomment to force a HDMI mode rather than DVI. This can make audio work in # DMT (computer monitor) modes hdmi_drive=2 # uncomment to increase signal to HDMI, if you have interference, blanking, or # no display config_hdmi_boost=4 # uncomment for composite PAL #sdtv_mode=2 #uncomment to overclock the arm. 700 MHz is the default. arm_freq=900 # for more options see http://elinux.org/RPi_config.txt core_freq=250 sdram_freq=450 over_voltage=2 gpu_mem=128 avoid_safe_mode=1