Well in general you dont want to use setAttr, or getAttr, or any melscript in expressions. Especially when you dont need to. Yeah the values in the world position arrays are the values for last frame, true. Thats because the procession of calculation is not yet computed It will happen just before drawing screen.
There should logical explanation for this , i don't beleave it is bug,etc.
Its not a bug per see, its quite consistent with how maya operates in general. Its how maya categorizes the computation. See maya works like follows. whanever something changes maya marks it as needing to update (the term used is attribute being dirty). Maya does this to avoid computing many things over and over again per frame.
Normally maya updates each attribute when its first asked for. However asking for the single value of a array atttribute, is not the same as asking for a normal attribute. The expression for particles work on the internal representation of the node this sckips the graph optimization (it does not have to but the ndoe would need many more conditionals if not making it a wee bit slow as it would nee dto exit the optimized code loop). Since the node knows in advance its going to need to update the world positions last for the visualisation anyway its foregoes doing the relatively expensive computation 2 times by marking the attribute clean ahead of time. However more importantly is ensures maya wouldnt go ahaead and use 1 frame old particle positions on screen sicne the alternative option is to not update the world postions after the after dynamics script. (well ok this COULD be fixed with yet another attribute but why slow computation down for a borderline case)
In general you almost never want to operate on worldspace positions of components tough for many other reasons. Its very easy for you to circumvent this and use position instead of worldPosition, position is already up to date and you can jsut simply calculate the world position yourself, use a node (i recommend this as secondary alternative it gives you better performance IF you ever hide the locator), using one more particle node OR restructure your situation so that the particle node really is allways in worldspace position. I recomend the restructuring because theres little sane need to ever move the particle shapes around in the scene because thats like trying to do the einstein experiment that led to the theory of relativity.
PS: its actually better to unpack the data yourself in a nonparticle expression node this actually forces the data to be up to date. But better yet it wouldnt get suspended when scrubbing backwards, or when using cached partice shapes.