Change your Test procedure like this

[pascal]procedure Test;
var
visx, visy, loopx, loopy : integer;
IsoHeight, IsoWidth, FCellWidthDiv2, FCellHeightDiv2: integer;
begin
IsoWidth := 64;
IsoHeight := 32;
FCellWidthDiv2 := IsoWidth div 2;
FCellHeightDiv2 := IsoHeight div 2;
Point.x := Point.x; //+ (FXOffset + ScrollXOffset);
Point.y := Point.y; //+ (FYOffset + ScrollYOffset);
result.X := -1; // set no tile
result.y := -1;
if (isowidth = 0) then Exit;
visx := MaxInt(0, Point.x div IsoWidth - 1); // guess what tile left
visy := MaxInt(0, Point.y div (FCellheightdiv2) - 1); // guess what tile top
for loopy := visy - 1 to // just loop through 9 tiles
MinInt(MaxMapHeight, visy + 1) do
for loopx := visx - 1 to
MinInt(MaxMapWidth, visx + 1) do
if isoPointInQuad(
(loopx * IsoWidth) + ((loopy mod 2) * (FCellwidthdiv2)),
(loopy * (FCellheightdiv2)) + (FCellheightdiv2),
(loopx * IsoWidth) + ((loopy mod 2) * (FCellwidthdiv2)) + (FCellwidthdiv2),
(loopy * (FCellheightdiv2)) + IsoHeight,
(loopx * IsoWidth) + ((loopy mod 2) * (FCellwidthdiv2)) + IsoWidth,
(loopy * (FCellheightdiv2)) + (IsoHeight div 2),
(loopx * IsoWidth) + ((loopy mod 2) * (FCellwidthdiv2)) + (FCellwidthdiv2),
(loopy * (FCellheightdiv2)),
Point.x, Point.y) then
begin
If loopy mod 2 = 1 then
result.x := loopx + 1
else
result.x := loopx;
result.y := loopy + 1;
Exit;
end;
end; // get co-ords relative to tile
[/pascal]

This is the bit that changed:

[pascal] If loopy mod 2 = 1 then
result.x := loopx + 1
else
result.x := loopx;[/pascal]

Basically it says if a line os offset by one tile to the right then dont add the one to the X coordinates.