bash has no built-in support for parsing CSVs. You could use ksh93 instead which supports parsing CSV (at least some form of CSV, the one where a literal " is entered as "" within double quotes) with read -S:
#! /bin/ksh93 -
while IFS=, read -rSu3 P D ignore; do
./xyz --project "$P" --displayname "$D""${D#*.}"
done 3< file.csv
Or use perl/python with a proper CSV parsing library that you could tune for the exact format of your csv. Example with perl:
perl -C -MText::CSV -e '
$c = Text::CSV->new;
while (($p, $d) = @{$c->getline(STDIN)}) {
$d =~ s/.*?\.//;
system "./xyz", "--project", $p, "--displayname", $d)$d;
}' < file.csv
If you can guarantee that the content of the CSV fields won't contain double-quote, comas or newline characters, with POSIX shells like bash, you could do:
tr -d \" < file.csv | while IFS=, read -r p d ignore; do
./xyz --project "$p" --displayname "$d""${d#*.}"
done