In generation 4, shininess is determined based on who hatches the pokemon. You're using two separate objects to fetch the trainer ID.
The code you pasted does not compile on the latest PKHeX.Core dll, because `ShinyUtil.GetShinyPID` requires different typed arguments.
public static uint GetShinyPID(in ushort tid, in ushort sid, in uint pid, in uint type)
{
var low = pid & 0xFFFF;
return ((type ^ tid ^ sid ^ low) << 16) | low;
}
TrainerTID7 is a uint, not a ushort.
When in doubt, look for how PKHeX itself uses the methods:
As you can see, you need to provide the 16-bit trainer values. You're passing in a 0 for the old PID, so the shiny PID that comes out will be less "random" with the lowest 16 bits being 0.