Peter, Charles, Luis and gile,
I don't have time right now to study recent code, but I will.
The point I was trying to make is this. The Origin property of a block definition is read/write. IOW, you cannot assume codewise the Origin is (0.0 0.0 0.0). So functions which attempt to transform a point from OCS to WCS or vice-versa need to allow for this possibility. Otherwise they will not return the correct point when the block origin is not (0.0 0.0 0.0).
An obvious question... why might the block origin not be (0.0 0.0 0.0) given it typically is. Code might change it which moves the insertion point without changing the position of block inserts. I have code which does this to fix blocks from outside sources which have no logical insertion point. The result is the origin point of a block definition may be (30.0 0.0 0.0).
I hope that's clear. The set of functions I wrote called ObjMatrix v2.lsp, which includes a TransPt function similar to gile's, allows for the possibility the origin point is not (0.0 0.0 0.0).