Function Update on Boolean Property
Your update function is not defined before you try to use it. You need to put it before the property group class. 

Here is a simple add-on that is very similar to your original:

bl_info = {
    "name": "Addon",
    "author": "Your Name Here",
    "version": (1, 0),
    "blender": (2, 75, 0),
    "location": "View3D &gt; Tools &gt; Test Text",
    "description": "Description",
    "warning": "",
    "wiki_url": "",
    "category": "Temp",
    }

import bpy
from bpy.props import StringProperty, BoolProperty
from bpy.types import PropertyGroup, Panel, Scene
from bpy.utils import register_class, unregister_class


def UpdatedFunction(self, context):
    print("In update func...")
    return


class MyPropertyGroup(PropertyGroup):
    custom_String = StringProperty(name ="My String")
    custom_Boolean = BoolProperty(update = UpdatedFunction)


class LayoutPanel(Panel):
    bl_label = "Test Text"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
    bl_category = "Tools"  # puts it in the tools tab of 3D view tools
    #bl_context = "mesh_edit"

    def draw(self, context):
        scene = bpy.context.scene
        layout = self.layout

        row = layout.row(align=True)
        col = row.column()
        col.prop(scene.my_prop_grp, 'custom_String', text="")
        col.prop(scene.my_prop_grp, 'custom_Boolean', text="")


classes = (MyPropertyGroup, LayoutPanel)

def register():
    for i in classes:
        register_class(i)

    # storing property in scene for this example
    Scene.my_prop_grp = bpy.props.PointerProperty(type=MyPropertyGroup)


def unregister():
    for i in classes:
        unregister_class(i)


if __name__ == "__main__":
    register()


I think you should be able to find your way from there, but let me know if you need further clarification.

Edit:



bl_info = {
    "name": "Addon",
    "author": "Your Name Here",
    "version": (1, 0),
    "blender": (2, 75, 0),
    "location": "View3D &gt; Tools &gt; Test Text",
    "description": "Description",
    "warning": "",
    "wiki_url": "",
    "category": "Temp",
    }

import bpy
from bpy.props import StringProperty, BoolProperty, PointerProperty
from bpy.types import PropertyGroup, Panel, Scene
from bpy.utils import register_class, unregister_class


def UpdatedFunction(self, context):
    print("In update func...")
    print(self.custom_String)


class MyPropertyGroup(PropertyGroup):
    custom_String = StringProperty(name ="String Property")
    custom_Boolean = BoolProperty(name="Bool Property", update=UpdatedFunction)


class LayoutPanel(Panel):
    bl_label = "Test Text"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
    bl_category = "Tools"  # puts it in the tools tab of 3D view tools
    #bl_context = "mesh_edit"

    def draw(self, context):
        scene = bpy.context.scene
        layout = self.layout

        row = layout.row(align=True)
        col = row.column()
        col.prop(scene.my_prop, 'custom_String', text="")
        col.prop(scene.my_prop, 'custom_Boolean', text="")

        col.prop(scene.my_other_prop, 'custom_String', text="")
        col.prop(scene.my_other_prop, 'custom_Boolean', text="")


classes = (MyPropertyGroup, LayoutPanel)

def register():
    for i in classes:
        register_class(i)

    # storing property in scene for this example
    Scene.my_prop = PointerProperty(type=MyPropertyGroup)
    Scene.my_other_prop = PointerProperty(type=MyPropertyGroup)


def unregister():
    for i in classes:
        unregister_class(i)


if __name__ == "__main__":
    register()