There are actually two problems:
1.) bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTBottomUpOptimizer.java is too generous in optimizing a way MINUS blocks.
final Set<IVariable<?>> incomingBound = sa.getDefinitelyIncomingBindings(childGroup, ...)
final Set<IVariable<?>> incomingBound = sa.getMaybeIncomingBindings(childGroup, ...)
2.) The latter will not fix the problem per se. For evaluating MINUS, the NOT EXISTS clause is currenty used. However, there is a difference (basically the case when the left and right side variables are disjoint), and I think that this cannot be statically checked in the general case… See http://www.w3.org/TR/sparql11-query/#sparqlAlgebra and the comment above.
com.bigdata.bop.join.JoinTypeEnum.Exists must be extended by a MINUS join type, which must then be implemented properly.
3.) The test case com.bigdata.rdf.sparql.ast.eval.TestUnionMinus must be hooked in (containing, amonst others, the tests for this ticket)