1. Sure. 3x3 matrices do rotate, skew and scale only. Object will stay on it's place. There is two ways, actually. First, and probably most useful, is to set P in point wrangle after setting transform in primitive wrangle, as you did. Second is to use primitive wrangle only and set pivot intrinsic, not sure about drawbacks of this method:
// Primitive wrangle.
matrix t = primintrinsic(1, "packedfulltransform", @primnum);
matrix3 r = (matrix3) t;
setprimintrinsic(0, "transform", @primnum, r);
vector p = primintrinsic(0, "pivot", 0);
p -= cracktransform(0, 0, 0, 0, p, t);
setprimintrinsic(0, "pivot", @primnum, p);
Note that using both @ptnum and @primnum is good only for vertex wrangles over normal geometry. @primnum in point wrangles will always be 0, and @ptnum is equal to 0 in primitive wrangles. Normally, you should split your snippet on two different wrangles. It did work, however, because there is single volume primitive, with only point #0 and primitive #0 exist.
2. I cannot reproduce my own snippet working now, so, never mind. Probably, you shouldn't bother with multiplying, but here is how to cleanly set VDB transform:
// Primitive wrangle.
matrix pft = primintrinsic(1, "packedfulltransform", @primnum);
vector scale = primintrinsic(0, "voxelsize", @primnum);
matrix3 r = (matrix3) pft;
scale(r, scale);
vector translate = cracktransform(0, 0, 0, 0, pft);
matrix t = (matrix) r;
translate(t, translate);
setprimintrinsic(0, "transform", @primnum, t);
3. Updating transform using intrinsic:pivot from animated input may help to get rid of jitter.
4. There is various problems with dealing with VDBs using intrinsics on my build. First is incorrect viewport updating. Caching geometry after wrangle node helps.
intrinsic_transforms.hipnc