IIRC, some vram update routines in HuC use small lengths of TIA instruction to copy bits to vram (Tia stalls all interrupts). If it's doing that during active display, it can cause hsync jitter (even with the small amounts it's set to). Do a full listing output and look at the S listing/asm file. You can also tighten up hsync overhead by using the 'user vector' and writing the VDC interrupt handler yourself. That can help too. You can look for code in HuC lib that SEI and CLI inside a routine (a long shot, but should be worth it). Also, if your VDC interrupt code is taking too long on certain instances (trying to do too much inside the routine), it can delay the next line, which will cause jitter.
Another thing that can stall the VDC interrupt is the Timer interrupt (HuC/Syscard PSG player has an option to run the sound engine timing from it). If you're using that, cli interrupts immediately after clearing $1403. Though you might want to use a 'flag' in case for some reason you get a double TIRQ interrupt; set it on call, clear it on exit, check it on start and if set then RTI.
You can use sprite color #0 to visually track (in the border) what part of your code/routine/etc is being executed during active display. You can color code different routines as well.