You are leaving x[0] uninitialized due to a fencepost error. In your first for loop, i starts are 0, but you are incrementing it before you use it as an index so x1 is the first element of x that is not null. You don't need a second look and can just build the obj expression in the first loop. Also, it's idiomatic for for loops use strict < (or !=) as the continuation criteria instead of '<='.
You can just build the obj expression in the first loop, avoid two loops and avoid creating the array x
IloCplex cplex = new IloCplex();
int i = 0;
this.rl = new double [(int)Data.Count+1];
IloLinearNumExpr obj = cplex.linearNumExpr();
for(int Pnr = 0; Pnr <= Data.PCount; Pnr++)
{
if(Data.X[Pnr]==1)
{
IloNumVar x = cplex.boolVar();
obj.addTerm(Data.RL[Pnr], x);
this.rl[i++] = Data.RL[Pnr];
}
}
cplex.addMaximize(obj);