It sounds like you aren't using encryption. The routers can find blocked sites and kill the connection, regardless of the IP address the sites are coming from.
To solve your problems, use Stunnel or ssh and tunnel Openvpn through it in TCP mode. Don't use default port numbers either, as 22 and 443 regularly get scanned after they have been accessed from China. Configure
both sides of the tunnel to drop RST packets on the WAN interface, as the Chinese routers like to generate these to disrupt connections, eg
iptables -I INPUT -p tcp --tcp-flags RST RST -m state --state RELATED,ESTABLISHED -j DROP
On the client you need to alter the destination to the localhost and port which you have ssh or stunnel listening on with DNAT;
iptables -t nat -I OUTPUT -p tcp --dport 1194 -j DNAT --to-destination 127.0.0.1:443
Can you see the text "TLS: Initial packet from...." in your log file, after which nothing happens before the 60 second time out? In locations where openvpn is filtered, this initial packet will be received, but everything after will fail. However AFAIK China isn't doing this yet. Best of luck.
server stunnel.conf
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
options = DONT_INSERT_EMPTY_FRAGMENTS
pid = /tmp/stunnel.pid
cert = /tmp/etc/server.crt
key = /tmp/etc/server.key
ciphers=AES128-SHA
[openvpn]
accept = 993
connect = 1194
client stunnel.conf
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
options = DONT_INSERT_EMPTY_FRAGMENTS
pid = /tmp/stunnel.pid
cert = /tmp/client.crt
key = /tmp/client.key
ciphers=AES128-SHA
client = yes
[openvpn]
accept = 443
connect = inserthost:993
PS to make things a bit easier, you can use the same certs for stunnel as you do for openvpn. You can also disable openvpn's encryption, to decrease cpu usage ("cipher none" in your openvpn conf on both server and client)