My response was going to be that this is a bug in SCIP (and it might be).
However, when I run your example locally and compare the solution produced by SCIP to the one produced by Ipopt (or cplexamp, or gurobi_ampl), I see that there is a critical line missing in SCIP’s solution file: objno X Y.
The Y part of this line is where we extract the ampl solver status number that we map to a solver status and solution status. SCIP's solution file ends just before this line is supposed to appear. It turns out Pyomo’s ASL solution file parser handling this scenario by returning “ok” and “optimal” for those statuses when that line is missing.
I’m not sure how to proceed here because I don’t know if this is a bug with SCIP or if there are many other solvers that do not output that line (it must have something to do with how the ASL routines are called). Interestingly enough, SCIP does indicate that the problem is infeasible through the message in the first line of the file, and this makes its way into the results.solver.message slot, so you could use this as a workaround for the time being.
Would you mind creating a ticket for this? Something obviously needs to change in the SOL parser to handle this situation better. The current behavior is terribly misleading.
Gabe
P.S. Thanks for reporting this.