There are various debug steps you can take.
- bit bang on the hardware I2C GPIO. If it works for SMBus then it should work with bit bang. It eliminates wiring and the pull-ups being a problem.
- use pigs to implement the code. If that works that would suggest the Python module is faulty.
pigs bi2co 4 17 9600
thenpigs bi2cz 4 4 0x68 2 6 7 3 0
- Switch on internal pigpio daemon debugging and try to trace the Python execution.
pigs csi 4
thencat /dev/pigerr&
to see the trace.
In this case I suspect 1. will work as I expect the weak (50k) internal pulls are not good enough for the I2C bus.