Percentages used in the x, y, width and height attributes of patterns are interpreted incorrectly when patternUnits is set to "objectBoundingBox": The percentages are first resolved relative to the viewport by SVG++, and the result is than interpreted as a factor of the referencing objects bounding box (as is usual for patternUnits="objectBoundingBox").
From some quick tests it seems that the percentages should instead be resolved relative to the referencing objects bounding box (i.e. x="25%" would be the same as x=".25" if patternUnits="objectBoundingBox").