Cactacalc - I've made a Mini Cactpot solver that lets you maximize the winnings (link to program in comments).

I did a matlab brute force method where I went through every possible combination of the choices for the 4 revealed locations, and my answers conflict with yours. I'm getting that the choice of the four locations do not matter. Here is my Matlab code:

scores = [0;
          0;
          0;
          0;
          0;
          10000;
          36;
          720;
          360;
          80;
          252;
          108;
          72;
          54;
          180;
          72;
          180;
          119;
          36;
          306;
          1080;
          144;
          1800;
          3600;];

P = perms(1:9); % all permutations of the scratchcard
Points = scores(getSums(P)); % the points for choosing rol/col/diag for each possible scratchcard
% note it is ordered as 3 col L to R, 3 rows T to B, TL to BR diag and TR
% to BL diag, for 8 columns


choosefour = nchoosek(1:9,4); % the possible scratch positions
possible_revealed_nums = unique(P(:,1:4),'rows'); % the possible numbers revealed

% store the utility (E(x)) for each possible scratch pattern here
U_store = zeros(126,1);

for i = 1: size(choosefour,1) % for all the possible scratch patterns
    for j = 1:size(possible_revealed_nums,1) % for all the possible revealed numbers in the scratch pattern
        % get the possible points for this set of reavealed numbers
        % (5*4*3*2*1 different combos)
        possible_points = Points(P(:,choosefour(i,1))==possible_revealed_nums(j,1)...
                                & P(:,choosefour(i,2))==possible_revealed_nums(j,2)...
                                & P(:,choosefour(i,3))==possible_revealed_nums(j,3)...
                                & P(:,choosefour(i,4))==possible_revealed_nums(j,4),:);

        % select the max row/col/diag, and average it for our E(x)
        expected_val = mean(max(possible_points,[],2),1);

        % store the E(x)
        U_store(i) = U_store(i) + expected_val;
    end
    % renormalize the points
    U_store(i) = U_store(i)/size(possible_revealed_nums,1);
    U_store(i)
    i
end

Where the function getsums is just finding the totals for the row/col/diags:

function S = getSums(P)
S = zeros(size(P,1),8);

S(:,1) = sum(P(:,1:3),2);
S(:,2) = sum(P(:,4:6),2);
S(:,3) = sum(P(:,7:9),2);
S(:,4) = P(:,1)+P(:,4)+P(:,7);
S(:,5) = P(:,2)+P(:,5)+P(:,8);
S(:,6) = P(:,3)+P(:,6)+P(:,9);
S(:,7) = P(:,1)+P(:,5)+P(:,9);
S(:,8) = P(:,3)+P(:,5)+P(:,7);

The jist if the code is:

for every possible scratch pattern, and for every possible permutation of the numbers, pick the rol/col/diag selection with the maximum E(x). Then sum and average all these E(x) over the number of patterns and permutations.

After a lengthy computation (around 30min) you get U_store, which is the utility for each pattern of scratch positions, and it is ordered as 3 cols, 3 rows, 2 diagonals. The results were that any initial scratch pattern has the same expected value, no matter if you pick the cross or diag or any other combination of scratches.

/r/ffxiv Thread Link - i.imgur.com